mingw -fvisibility = hidden似乎不起作用

Sla*_*ava 5 visibility mingw shared-libraries

我有一个共享库,它应该只导出一个标有的函数__attribute__ ((visibility ("default"))).它还链接到另一个静态库(fftw),和

#include<fftw3.h>
Run Code Online (Sandbox Code Playgroud)

之前是:

#pragma GCC visibility push(hidden)
Run Code Online (Sandbox Code Playgroud)

使用的链接器命令:

g++.exe -fvisibility=hidden -shared -o mylib.dll -Wl,--out-implib,mylib.dll.a -Wl,--no-whole-archive libfftw3.a libfftw3_omp.a -lgomp 
Run Code Online (Sandbox Code Playgroud)

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

mingw和gcc 4.6.1是否支持可见性标志?如果是,我如何摆脱共享库中的所有不必要的东西?

rub*_*nvb 2

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

它应该警告不良可见性属性,也许您需要调高警告级别-Wall -Wextra -pedantic)。