我有一个共享库,应该只导出一个用__attribute__ ((visibility ("default")))标记的功能。它还链接到另一个静态库(fftw),并且

#include<fftw3.h>


前面有:

#pragma GCC visibility push(hidden)


使用的链接器命令:

g++.exe -fvisibility=hidden -shared -o mylib.dll -Wl,--out-implib,mylib.dll.a -Wl,--no-whole-archive libfftw3.a libfftw3_omp.a -lgomp


现在生成的库很大,如果我检查导出的函数,它将包括所有fftw函数以及文件中的ALL函数。看来mingw忽略了可见性选项。我读过以前它给-fvisibility提供了警告,但是现在它编译时没有任何警告。

mingw和gcc 4.6.1是否支持可见性标志?如果是,我如何清除共享库中所有不必要的内容?

最佳答案

Windows PE对象文件没有可见性属性。最接近的是dllexport / dllimport,但这仅用于共享库(DLL)。因此,要么不要用__declspec(dllexport)标记所有FFTW函数,并希望链接The Right Thing (tm)链接静态库,要么注意不要链接到FFTW(如果与库链接)。

它应该警告可见性属性不佳,也许您需要提高警告级别(cc)。

10-05 19:47