Table des matières
Contenu de la question
Solution
Maison développement back-end Golang Compiler la DLL avec la bibliothèque statique en utilisant gcc (mingw32)

Compiler la DLL avec la bibliothèque statique en utilisant gcc (mingw32)

Feb 09, 2024 am 10:00 AM
typedef lsp

使用 gcc (mingw32) 编译带有静态库的 DLL

l'éditeur php Baicao vous présentera comment utiliser gcc (mingw32) pour compiler une DLL avec une bibliothèque statique. Au cours du processus de développement, il est souvent nécessaire de regrouper des bibliothèques statiques dans des DLL pour faciliter leur appel dans d'autres projets. La méthode d'utilisation de gcc (mingw32) pour compiler une DLL avec une bibliothèque statique est relativement simple, il suffit de suivre certaines étapes. Tout d’abord, assurez-vous que les compilateurs mingw32 et gcc sont installés. Ensuite, entrez gcc -shared -o libname.dll libname.a sur la ligne de commande pour générer le fichier DLL. De cette façon, vous pouvez facilement compiler la bibliothèque statique dans une DLL pour l'utiliser dans d'autres projets.

Contenu de la question

J'ai une bibliothèque statique générée par un outil externe (c'est-à-dire cgo), appelons-la libsecondary.a. Je souhaite générer une bibliothèque dynamique tout en incluant "libsecondary.a" comme dépendance, j'exporte une fonction appelée onprocessinit() dans libsecondary.h et l'appelle sur l'événement dll_process_attach.

J'ai essayé de générer la bibliothèque partagée mais cela ne semble pas fonctionner x86_64-w64-mingw32-share-l. -lsecondaire -static-libgcc -static-libstdc++ -static .dllmain.c

La sortie d'erreur est dllmain.c:(.text+0x9b) : référence non définie à 'onprocessinit', que se passe-t-il ?

Voici le fichier d'en-tête libsecondary.h

/* code generated by cmd/cgo; do not edit. */

/* package command-line-arguments */


#line 1 "cgo-builtin-export-prolog"

#include <stddef.h>

#ifndef go_cgo_export_prologue_h
#define go_cgo_export_prologue_h

#ifndef go_cgo_gostring_typedef
typedef struct { const char *p; ptrdiff_t n; } _gostring_;
#endif

#endif

/* start of preamble from import "c" comments.  */




/* end of preamble from import "c" comments.  */


/* start of boilerplate cgo prologue.  */
#line 1 "cgo-gcc-export-header-prolog"

#ifndef go_cgo_prologue_h
#define go_cgo_prologue_h

typedef signed char goint8;
typedef unsigned char gouint8;
typedef short goint16;
typedef unsigned short gouint16;
typedef int goint32;
typedef unsigned int gouint32;
typedef long long goint64;
typedef unsigned long long gouint64;
typedef goint64 goint;
typedef gouint64 gouint;
typedef size_t gouintptr;
typedef float gofloat32;
typedef double gofloat64;
#ifdef _msc_ver
#include <complex.h>
typedef _fcomplex gocomplex64;
typedef _dcomplex gocomplex128;
#else
typedef float _complex gocomplex64;
typedef double _complex gocomplex128;
#endif

/*
  static assertion to make sure the file is being used on architecture
  at least with matching size of goint.
*/
typedef char _check_for_64_bit_pointer_matching_goint[sizeof(void*)==64/8 ? 1:-1];

#ifndef go_cgo_gostring_typedef
typedef _gostring_ gostring;
#endif
typedef void *gomap;
typedef void *gochan;
typedef struct { void *t; void *v; } gointerface;
typedef struct { void *data; goint len; goint cap; } goslice;

#endif

/* end of boilerplate cgo prologue.  */

#ifdef __cplusplus
extern "c" {
#endif

extern __declspec(dllexport) void onprocessinit();

#ifdef __cplusplus
}
#endif
Copier après la connexion

Voici dllmain.c

65be0f35ebbcbc

Il s'agit de la fonction golang exportée (la fonction que j'ai compilée en utilisant go build -buildmode=c-archive)

package main
import "C"
import (
    "unsafe"
    "syscall"
)

//export OnProcessInit
func OnProcessInit() {
    const (
        NULL  = 0
        MB_OK = 0
    )
    caption := "Hola"
    title := "desdegoo"
    ret, _, _ := syscall.NewLazyDLL("user32.dll").NewProc("MessageBoxW").Call(
        uintptr(NULL),
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))),
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))),
        uintptr(MB_OK))

    if ret != 1 {
        return
    }
    return 
}

func main() {}
Copier après la connexion

Solution

Wow, la réponse est la position de l'argument,

x86_64-w64-mingw32 -shared -static-libgcc -static-libstdc++ -static .dllmain.c .libsecondary.a

Si vous le tapez à l'envers, il ne trouvera pas la référence de libsecondary.a, mon Dieu...

Le code ci-dessus se retrouve également dans une impasse lors du chargement car syscall.NewLazyDLL appelle LoadLibraryA et il est verrouillé dans DLL_PROCESS_ATTACH, donc la solution de contournement consiste à CreateThread et à exécuter la fonction golang exportée dans le fil :)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajuster la taille de la police sur Redmi Note13RPro ? Comment ajuster la taille de la police sur Redmi Note13RPro ? May 07, 2024 pm 06:34 PM

Ne changez pas la signification du contenu original, affinez le contenu, réécrivez le contenu, ne continuez pas. Redmi Note13RPro a non seulement d'excellentes performances, mais offre également une expérience utilisateur encore meilleure afin de donner à chacun une expérience plus confortable. , Redmi Note13RPro est équipé d'une fonction de réglage des polices pour permettre aux utilisateurs de pouvoir ajuster les polices de votre téléphone. Si vous voulez savoir comment ajuster la taille de la police du Redmi Note13R Pro, jetez-y un œil. Comment ajuster la taille de la police sur Redmi Note13RPro ? 1. Ouvrez l'application Paramètres. 2. Faites défiler vers le bas et sélectionnez « Affichage ». 3. Cliquez sur "Taille du texte". 4. Sur cet écran, vous pouvez ajuster la taille de la police en faisant glisser le curseur ou en sélectionnant une taille de police prédéfinie. 5. Une fois le réglage terminé, appuyez sur "OK" pour enregistrer

Utilisation de la structure typedef en langage C Utilisation de la structure typedef en langage C May 09, 2024 am 10:15 AM

typedef struct est utilisé en langage C pour créer des alias de type de structure afin de simplifier l'utilisation des structures. Il crée un alias pour un nouveau type de données sur une structure existante en spécifiant l'alias de la structure. Les avantages incluent une lisibilité améliorée, la réutilisation du code et la vérification du type. Remarque : La structure doit être définie avant d'utiliser un alias. L'alias doit être unique dans le programme et valide uniquement dans le périmètre dans lequel il est déclaré.

Comment connecter Redmi Note13RPro à l'ordinateur ? Comment connecter Redmi Note13RPro à l'ordinateur ? May 09, 2024 pm 06:52 PM

Redmi Note13RPro est un téléphone mobile très populaire récemment. De nombreux consommateurs ont acheté ce téléphone. Cependant, de nombreux utilisateurs utilisent ce téléphone pour la première fois et ne savent donc pas comment connecter Redmi Note13RPro à l'ordinateur. L'éditeur est là pour vous expliquer. Une introduction détaillée du didacticiel est fournie. Comment connecter Redmi Note13RPro à l’ordinateur ? 1. Utilisez un câble de données USB pour connecter le téléphone Redmi à l'interface USB de l'ordinateur. 2. Ouvrez les paramètres du téléphone, cliquez sur Options et activez le débogage USB. 3. Ouvrez le gestionnaire de périphériques sur votre ordinateur et recherchez l'option de périphérique mobile. 4. Cliquez avec le bouton droit sur le périphérique mobile, sélectionnez Mettre à jour le pilote, puis sélectionnez Rechercher automatiquement les pilotes mis à jour. 5. Si l'ordinateur ne recherche pas automatiquement le pilote,

Comment extraire le texte des images sur Redmi Note13RPro ? Comment extraire le texte des images sur Redmi Note13RPro ? May 08, 2024 pm 10:00 PM

Le téléphone mobile Redmi Note13RPro intègre un certain nombre d'outils intelligents en termes de fonctions logicielles, parmi lesquels l'extraction rapide et précise du contenu du texte des images. L'éditeur suivant vous présentera comment Redmi Note13RPro extrait le texte des images. Comment extraire le texte des images sur Redmi Note13RPro ? Utilisez la fonction de numérisation de code QR Xiaomi, ouvrez l'application de numérisation de code QR sur votre téléphone, cliquez sur l'icône d'image, sélectionnez une image, puis cliquez sur l'option « Reconnaître le texte » à droite pour extraire avec succès le texte de l'image. Fonctionner via l'album du téléphone mobile. Recherchez l'image dont le texte doit être extrait dans l'album du téléphone mobile, cliquez sur « Plus » sous l'image et sélectionnez « Extraire le texte ». Après une reconnaissance réussie, vous pouvez copier ou enregistrer le texte selon vos besoins. Utilisez les mini-programmes WeChat. Micro ouvert

Un guide complet à tous les niveaux de 'Whole Life' Un guide complet à tous les niveaux de 'Whole Life' May 07, 2024 pm 06:31 PM

Whole Huoba est un jeu de réflexion décontracté très amusant que tout le monde peut découvrir sur plusieurs plateformes ! Le jeu propose d'innombrables niveaux passionnants qui attendent d'être débloqués. Chaque niveau est plein de nouveautés et de défis, vous permettant de vivre une aventure intéressante en répondant à des questions et en déverrouillant du nouveau contenu de jeu. Alors comment effacer tout le niveau de Huoba ? Aujourd'hui je vous propose un guide complet de tous les niveaux de "Whole Life". Si vous rencontrez des problèmes pour réussir le niveau, vous pouvez vous y référer ! "The Whole Life" guide complet pour tous les niveaux de "The Whole Life" Le guide complet pour tous les niveaux de "The Whole Life" Aidez-la à regarder le réveillon du Nouvel An, aidez la petite sœur à identifier le salaud de loup et la grand-mère aide la petite fille à échapper au danger pour une aventure en plein air, en faisant semblant de ne pas voir Ah Piao et en se transformant. L'humanoïde a aidé l'orang-outan à devenir un humanoïde. Quelqu'un sur la banquette arrière est resté calme et s'est occupé du fantôme féminin. calmez-vous et traitez le fantôme féminin.

'Whole Life' Journey to the West Beauty aide les personnages féminins de Journey to the West à retourner chez eux et clarifie la stratégie 'Whole Life' Journey to the West Beauty aide les personnages féminins de Journey to the West à retourner chez eux et clarifie la stratégie May 07, 2024 pm 03:46 PM

Whole Huoba est un jeu de niveau amusant très populaire sur Douyin. Il existe de nombreux niveaux dans le jeu qui attendent que tout le monde les défie ! Dans le niveau de jeu « Journey to the West Beauty », tout le monde doit aider le personnage féminin de « Journey to the West » à revenir à son poste. Comment passer le niveau ? Ce qui suit est un guide pour vous permettre de terminer le niveau de "Vie entière" dans "Journey to the West" où les beautés aident les personnages féminins de "Journey to the West" à retourner à leur place. passez le niveau, jetons un oeil. J'espère que cela pourra vous aider. La beauté de "Whole Life" Journey to the West aide le personnage féminin de Journey to the West à revenir à sa place. La beauté de Journey to the West aide le personnage féminin de Journey to the West à revenir à sa place. 1. Cliquez sur le parchemin pour faire apparaître le personnage féminin. 2. L'esprit des os blancs et l'esprit du paon doivent cliquer pour changer d'action. 3. La réponse est celle indiquée dans la figure ci-dessous : "Toute la vie". Live" a un guide complet pour tous les niveaux, l'aidant à être l'observatrice de l'année, aidant la petite sœur à identifier le salaud et le loup, et la grand-mère à aider la petite fille à échapper au danger et à vivre des aventures en plein air.

Guide 'Toute la vie' pour sauver les voisins et exhorter tous les voisins à descendre Guide 'Toute la vie' pour sauver les voisins et exhorter tous les voisins à descendre May 07, 2024 pm 07:00 PM

Whole Huoba est un jeu de niveau amusant très populaire sur Douyin. Il existe de nombreux niveaux dans le jeu qui attendent que tout le monde les défie ! Dans le jeu, vous devez persuader tous les voisins de descendre au niveau pour sauver les voisins. Comment réussir le niveau ? Ce qui suit est le guide pour sauver les voisins et inciter tous les voisins à descendre pour passer le niveau présenté par l'éditeur. Amis qui ne savent pas comment passer le niveau, jetons un coup d'œil ensemble, j'espère que cela pourra. T'aider. "Toute la vie" Sauver les voisins et conseiller à tous les voisins de descendre Stratégie de dégagement Sauver les voisins et encourager tous les voisins à descendre 1. Quelqu'un en bas a besoin de premiers soins 2. La librairie du rez-de-chaussée vend du matériel d'apprentissage épuisé 3 . Il y a beaucoup de cartons dans la poubelle en bas 4. J'accepte la date, vous descendez en premier 5. Votre frère est venu dans notre communauté pour promouvoir 6. Quelqu'un a découvert un nouveau lieu de pêche 7. Faites glisser le chat en conserve en bas 8. Faites glisser la fourchette vers

Liste d'introduction aux armes des oiseaux de guerre 'Dust White Forbidden Zone' Liste d'introduction aux armes des oiseaux de guerre 'Dust White Forbidden Zone' May 07, 2024 pm 02:04 PM

Que diriez-vous de la frégate dans « Dust White Forbidden Zone » ? Il existe de nombreuses armes puissantes dans le jeu parmi lesquelles les joueurs peuvent choisir. L'éditeur a aidé les joueurs à trier l'introduction détaillée des attributs de l'arme frégate. J'espère que cela pourra aider les joueurs. "Dust White Forbidden Zone" Liste d'introduction des armes Warshipbird Informations sur l'arme Nom de l'introduction de l'arme Warshipbird Niveau Quatre étoiles Type de mitraillette Élément Chaleur élevée Cadence de tir 1080 Capacité de munitions 45 Version réelle 1.0 Compétences d'armes : soutien supplémentaire Compétences de soutien utilisées par les joueurs sur le terrain pour obtenir les utilisateurs d'armes Puissance d'attaque 13,2 %/15,4 %/17,6 %/19,8 %/22 % de la puissance d'attaque pendant 15 secondes. Matériau révolutionnaire niveau 20 : particules synthétiques*niveau 430 : plastique aromatique*3, particules synthétiques*niveau 1040 : plastique aromatique

See all articles