"`atexit'"的多重定义与DLL链接时

时间:2016-08-29 21:51:19

标签: c++ gcc dll g++ mingw

我更特别地使用MinGW32 TDM-GCC-32。我有一个非常简单的项目,我链接到一个自定义库,但这个错误弹出:

.progress-basic

我用来构建库的命令:

border-radius: inherit;

我想我必须使用不同的选项来编译库以避免重新定义..

1 个答案:

答案 0 :(得分:1)

我认为dlltool方法目前已被弃用。我不能在这里指责你,因为大多数可用的文档仍然这样说。

Gcc将直接与.dll文件链接,使.a文件过时(至少在处理dll时 - 使用.a文件的唯一当前原因是静态链接)。您甚至不必使用-l标志指定dll,但如果它不在当前目录中则必须指定dll的路径

C:\Users\burito>gcc main.o opengl32.dll -o main.exe
gcc: error: opengl32.dll: No such file or directory

C:\Users\burito>gcc main.o c:\Windows\system32\opengl32.dll -o main.exe

C:\Users\burito>

好的,opengl32.dll可能不是一个很好的例子,但我希望我已经给了你一般的想法。

相信 MSVC仍然需要.lib个文件才能使用.dll,如果库中没有g++ -D_WIN32 -D_MINGW -lgdi32 -lgdiplus interception/x86/interception.dll main.cpp -o interceptor.exe ,可以通过多种方式制作它们。

在您的特定情况下,应该起作用的命令是......

.a

如果出于某种原因你真的需要从.dll创建一个gendef interception.dll dlltool -l interception.a -d interception.def -k -A 文件,那么对我有用的命令是......

.dll

由于您链接的存储库确实在其版本中提供了injectIntl<any>个文件,因此您不必自己构建它们