Eri*_*ara 5 c c++ gcc glibc static-compilation
我正在构建一些需要作为共享对象(.so)的代码.
我的构建机器上的libc可能比已发布的机器更新的问题,所以我想静态地链接它以避免兼容性问题.(我的程序使用memcpy,当它可以低到2.5时显然是GLIBC_2.14的东西).
使用-shared和-static进行编译不起作用,因为crtbeginT.o未使用-fPIC编译.
编辑:可能不是动态链接libc静态和其他库的GCC重复,重新访问?因为这个问题谈论静态链接libc的主要精灵,这是关于静态链接libc的共享对象.
您希望在共享库中静态链接glibc.
你不应该这样做.
如果您尝试,最终将导致C++ One Definition Rule(ODR)违规.这是因为glibc的某些部分来自目标机器的"旧"版本,有些部分来自库的"新"版本.结果是未定义的行为.
正确的解决方案很简单:使用较旧的glibc构建(与最旧的目标一样旧).或者为你需要的每个版本的glibc多次构建一次(如果你真的需要新的glibc功能).即使您认为需要新的glibc功能,也可以考虑将一个功能以不同的名称复制粘贴到库中以避免冲突.
特别是关于memcpy,请参阅:https://stackoverflow.com/a/8823419/4323 - 以及手动修复:https://stackoverflow.com/a/5977518/4323
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |