在Linux上链接可执行文件时,我得到一个'未定义的引用'错误,如下所示:
undefined reference to `symbol@SOMELIB_1.0'
我无法控制'SOMELIB',但 我的 符号symbol
位于我自己的共享库中。我完全相信 symbol@SOMELIB_1.0 与我的库中的符号相同(提供完全相同的功能),实际上甚至源代码也几乎相同。
如何强制/别名symbol@SOMELIB_1.0
从我的图书馆链接,而不是SOMELIB_1.0
?
我正在考虑链接器脚本中的某种符号版本化技巧,但我找不到任何解决方案甚至是线索。
提前致谢。
答案 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.mapSOMELIB_1.0 {
symbol1;
symbol2;
};
要链接“mylib.so”,我需要传递其他参数:-Wl,--version-script=mylib.map