I have a shared library which is supposed to export only one function which is marked with __attribute__ ((visibility ("default"))). It also links with another static library (fftw), and
#include<fftw3.h>
is preceded with:
#pragma GCC visibility push(hidden)
The linker command used:
g++.exe -fvisibility=hidden -shared -o mylib.dll -Wl,--out-implib,mylib.dll.a -Wl,--no-whole-archive libfftw3.a libfftw3_omp.a -lgomp
Now the resulting library is huge and if I check the exported functions it includes ALL fftw functions, and ALL function from my files. It looks like mingw ignores visibility options. I read that previously it gave warning about -fvisibility, but now it compiles with no warnings whatsoever.
Does mingw and gcc 4.6.1 support visibility flags? If yes, how do I get rid of all unnecessary stuff in my shared library?
Windows PE object files do not have visibility attributes. The closest is dllexport/dllimport, but that’s only for shared libraries (DLL’s). So either you don’t mark all FFTW functions with
__declspec(dllexport), and hope linking the static library doesThe Right Thing (tm), or you take care not to link to FFTW if linking with your library.It should warn about bad visibility attributes, perhaps you need to turn up the warning level
-Wall -Wextra -pedantic).