【发布时间】:2011-02-18 02:26:50
【问题描述】:
我正在使用 MinGW 工具链构建一个 Windows 动态库。
为了构建这个库,我静态链接到提供 API 的其他 2 个库,并且我有一个 .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
编辑:在关于链接器的docs 中,它说--export-all-symbols 是默认行为,如果您提供def 文件,则当您不明确使用该选项时,它会被禁用,除非它没有'吨;无论如何,第 3 方库中的符号正在被导出。
编辑:添加选项 --exclude-libs LIBS 或 –exclude-symbols SYMBOLS 不会阻止导出库中的符号。
【问题讨论】:
-
--exclude-libs ALL选项会很有趣