1

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

undefined reference to `symbol@SOMELIB_1.0'

我无法控制“SOMELIB”,但我在自己的一个共享库中确实有该符号symbol。我绝对确定symbol@SOMELIB_1.0与我的库中的符号相同(提供完全相同的功能),实际上甚至源代码也几乎相同。

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

提前致谢。

4

1 回答 1

1

经过长时间的战斗(和搜索),我在这里找到了解决方案。总结一下:我需要两个符号。在我的源代码中,我放了这样的东西:

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

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

然后我需要一个喜欢的脚本mylib.map包含:

SOMELIB_1.0 {
    symbol1;
    symbol2;
};

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

于 2013-08-21T13:32:47.067 回答