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是否支持可见性标志?如果是,我如何摆脱共享库中的所有不必要的东西?
Windows PE 对象文件没有可见性属性。最接近的是 dllexport/dllimport,但这仅适用于共享库 (DLL)。因此,要么您不使用 标记所有 FFTW 函数__declspec(dllexport),并希望链接静态库会这样做The Right Thing (tm),要么如果链接到您的库,请注意不要链接到 FFTW。
它应该警告不良可见性属性,也许您需要调高警告级别-Wall -Wextra -pedantic)。