linux中链接器的对应选项

Posted

技术标签:

【中文标题】linux中链接器的对应选项【英文标题】:Corresponding option for linker in linux 【发布时间】:2015-11-20 13:18:45 【问题描述】:

对于 IBM 的 ld 链接器,-bexport :filename 有一个选项。

在这个文件中,我们有链接时需要导出的函数的名称。

但是在 ubuntu 中我找不到这个并且它给出了以下错误 /usr/bin/ld: invalid BFD target `export:stx_export'

请建议我可以在 ubuntu 中做什么来在链接时导出此类文件。提前致谢。

【问题讨论】:

文档在这里:gcc.gnu.org/onlinedocs/gcc 找到 --dynamic-list=stx_export 但我找不到动态列表文件的格式。我试过全局:TPCALL;全局:TPACALL;但它在动态列表中给出了错误语法错误 【参考方案1】:

GNU ld 中有一个 -retain-symbols-file 选项:

AIX: -Wl,-bE:something.exp
GNU: -Wl,--retain-symbols-file=something.exp

编辑:正如 Employed Russian 指出的那样,在创建共享库时,ld 不尊重此文件。谢谢你,受雇的俄罗斯人。

注意:如果我们使用带有选项 -export-symbols 的 libtool,它会使用 -Wl、-version-script -Wl、.libs/libfoo.ver 等选项,其中 libfoo.ver 是从其中创建的自动导出文件:

 global:
const_var2ptr;
const_var2ptr2;
init_var;
lt_libaix_modcall_LTX_preloaded_symbols;
uninit_var;
var2ptr;
vartest2_fun;
vartest_fun;
local: *; ;

【讨论】:

您好,感谢您提供此选项。但是当我在链接时使用此选项时..我认为它只考虑文件中的符号...不对应链接的符号。 不能说我理解您的问题...您尝试了什么命令,您期望什么结果,以及发生了什么? @LorinczyZsigmond 据我所知,--retain-symbols-file 在链接共享库时绝对什么都不做【参考方案2】:

在 Linux 上实现此目的的标准方法是使用版本脚本。这个answer 提供了详细信息。

【讨论】:

以上是关于linux中链接器的对应选项的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭链接器?

链接过程

Linux C/C++ 链接选项之静态库--whole-archive,--no-whole-archive和--start-group, --end-group

揭开链接器的面纱(中)

链接器语法:链接器在链接期间不使用所有链接器的标志

Qt Creator/Linux:为动态库设置编译器/链接器选项 -ldl