如何强制链接特定库中的符号?

时间:2013-08-21 08:31:11

标签: linux gcc linker ld linker-scripts

在Linux上链接可执行文件时,我得到一个'未定义的引用'错误,如下所示:

undefined reference to `symbol@SOMELIB_1.0'

我无法控制'SOMELIB',但 我的 符号symbol位于我自己的共享库中。我完全相信 symbol@SOMELIB_1.0 与我的库中的符号相同(提供完全相同的功能),实际上甚至源代码也几乎相同。

如何强制/别名symbol@SOMELIB_1.0从我的图书馆链接,而不是SOMELIB_1.0? 我正在考虑链接器脚本中的某种符号版本化技巧,但我找不到任何解决方案甚至是线索。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在loooong斗争(和搜索)之后,我找到了解决方案here。 总结一下:我需要两个符号。在我的源代码中,我提出了类似的内容:

__asm__(".symver symbol1, symbol1@SOMELIB_1.0");
void symbol1(void)
{
.....
}

__asm__(".symver symbol2, symbol2@SOMELIB_1.0");
void symbol2(void)
{
.....
}

然后我需要一个包含:

的liker脚本 mylib.map
SOMELIB_1.0 {
    symbol1;
    symbol2;
};

要链接“mylib.so”,我需要传递其他参数:-Wl,--version-script=mylib.map