我构建了一个自定义dll,它依赖于带有Ming-w64的3d party静态库。我的问题是,除了我用 __ declspec(dllexport)标记导出的函数之外,dll还会导出所有3d party静态库符号。 我想只导出我用 __ declspec(dllexport)标记导出的函数的符号。
我找不到关于Ming-w64的ld的具体文档,但是我找到了this关于Cygwin / MinGW的ld:
导出DLL符号。
cygwin / mingw ld有多种方法可以导出dll的符号。
使用自动导出功能:
默认情况下,ld使用自动导出功能导出符号,该功能由以下命令行选项控制:
-export-all-symbols [这是默认值]
-exclude符号
-exclude-库
但是,如果在命令行中未明确指定-export-all-symbols,则如果满足以下任一条件,则将禁用默认的自动导出行为:
使用DEF文件。
任何目标文件中的任何符号都标有__declspec(dllexport)属性。
从上面可以看出,MinGW的ld和MinGW-w64的ld似乎表现不同。我希望不会导出3d party静态库符号,因为在目标文件中有 __ declspec(dllexport)标记的符号。我还尝试使用 -exclude-libs = ALL 来解决问题,但似乎没有任何影响。
我在使用MinGW-W64时遇到的行为是否正常?
如果是,我怎样才能实现目标?