php小编百草为你介绍如何使用gcc (mingw32)编译带有静态库的DLL。在开发过程中,经常需要将静态库打包成DLL以便于在其他项目中调用。使用gcc (mingw32)编译带有静态库的DLL的方法相对简单,只需按照一定的步骤操作即可。首先,确保已安装mingw32和gcc编译器。然后,在命令行中输入gcc -shared -o libname.dll libname.a即可生成DLL文件。通过这种方式,你可以轻松地将静态库编译为DLL,以便在其他项目中使用。,我有一个由外部工具(即 cgo)生成的静态库,我们将其称为 libsecondary.a。我想生成一个动态库,同时包含“libsecondary.a”作为依赖项,我在 libsecondary.h 中导出一个名为 onprocessinit() 的函数,并在 dll_process_attach 事件上调用它。,我尝试生成共享库,但似乎无法使用
x86_64-w64-mingw32-共享-l。 -lsecondary -static-libgcc -static-libstdc++ -static .\dllmain.c,错误输出是
dllmain.c:(.text+0x9b): 未定义对“onprocessinit”的引用,这是怎么回事?,这是头文件libsecondary.h,这是 dllmain.c,65be0f35ebbcbc,这是导出的 golang 函数(我使用 go build -buildmode=c-archive 编译的函数),哇,答案是论证位置,,x86_64-w64-mingw32 -shared -static-libgcc -static-libstdc++ -static .\dllmain.c .\libsecondary.a,如果你向后输入它,它将找不到来自 libsecondary.a 的引用,天哪……,上面的代码在加载时也会陷入死锁,因为 syscall.NewLazyDLL 调用 LoadLibraryA,并且它被锁定在 DLL_PROCESS_ATTACH 中,所以解决方法是 CreateThread 并在线程内运行 golang 导出函数:),