如何使用MinGW-w64从dll构建中排除符号?

时间:2018-04-10 20:19:59

标签: dll linker mingw ld mingw-w64

我构建了一个自定义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时遇到的行为是否正常?

如果是,我怎样才能实现目标?

0 个答案:

没有答案