我正在使用MinGW工具链构建Windows动态库。
为了构建这个库,我正在静态链接到其他两个提供API的库,并且我有一个.def
文件,在其中编写了我想要在我的库中导出的唯一符号。
问题是GCC正在导出所有符号,包括我链接到的库中的符号。有没有办法告诉链接器只导出def
文件中的符号?
我知道有选项--export-all-symbols
,但似乎没有相反的选项。
现在,构建脚本的最后一行具有以下结构:
g++ -shared CXXFLAGS DEFINES INCLUDES -o library.dll library.cpp DEF_FILE \
OBJECT_FILES LIBS -Wl,--enable-stdcall-fixup
编辑:在关于链接器的文档中,它说
--export-all-symbols
是默认行为,并且当你没有显式使用该选项时,如果提供了一个def
文件,则会禁用它,除非它不被禁用;第三方库中的符号仍然会被导出。编辑:添加选项
--exclude-libs LIBS
或–exclude-symbols SYMBOLS
也无法防止从库中导出符号。