我在我的Ubuntu中创建了.so库并在另一台机器上运行它。得到错误:
/lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.15' not found
我想这是一般的C ++库。但是如何解决这样的问题呢?我无法更改客户端配置,这意味着我必须对我的配置执行某些操作。但究竟我必须做什么?
UPD
ldd -version
返回
我的机器:
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
主机:
ldd (Ubuntu EGLIBC 2.11.1-0ubuntu7.8) 2.11.1
答案 0 :(得分:2)
在目标计算机上,运行 ldd --version 并检查输出,它将告诉您它们具有哪个版本的GLIBC_。
请参阅此SO解决方案以了解如何执行此操作。 How can I link to a specific glibc version?
答案 1 :(得分:1)
您必须确保链接到相应或较旧版本的GLIBC。 GCC具有标志{{1}},允许您定义使用哪些库。
答案 2 :(得分:0)
重点是创建共享库必然意味着您需要将其链接到C库(在您的情况下为glibc)。这意味着对C库函数(stdc ++库所做的)的调用将被替换为C库中的实际正确的符号位置。
现在,如果编译/链接机器上的C库与目标机器上的C库不同,则此必须失败,因此会检查libc版本。
解决方案是静态链接你的.so(通常没有多大意义),或者只是为你的目标机器正确编译和链接它。
答案 3 :(得分:0)
除了编译一切静态,这通常是一个坏的 想法或根本不工作,解决问题的唯一方法 是为目标平台重新编译二进制文件。
使用相同的Ubuntu版本安装虚拟机或chroot
在目标平台上并在那里编译。还有解决方案
像sbuild
或pbuilder/cowbuilder
这样可以为Debian / Ubuntu软件包自动执行此操作。