【发布时间】:2020-02-06 10:49:34
【问题描述】:
我即将向我的客户发布一个库 (.so)。
但是,我客户的平台是一个非常古老的 debian(2017 年发布的 9.1)。
我的库仅适用于 >= glibc-2.27。
我设法通过以下技巧运行程序
// copy libm-2.27.so from my computer to the old debian
ln -sf ./libm-2.27.so libm.so.6
gcc ./test.c -o ./test -lmylib -L ./ -lm
LD_LIBRARY_PATH=`pwd` ./test
但我的客户不接受这种解决方案。
是否可以链接到旧版本的数学库?
例如,客户给了我数学库,我在我的计算机上将我的库与它链接起来。
谢谢!
【问题讨论】:
-
是的,这可能有效,但不是很好。如果您确实想使用新版本的 libm,则应改为静态链接。
-
但是最好的办法是在 Debian 9.1 上为这个客户构建你的库版本 - 例如。设置 VM 或 Docker。不过,更改编译器或 glib 的其他部分可能会导致问题。
-
我没有运气静态链接 libm。我得到了这个 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libm-2.27.a(e_atan2.o): relocation R_X86_64_PC32 针对未定义的符号 `_dl_x86_cpu_features' 在制作共享对象时不能使用;使用 -fPIC /usr/bin/ld 重新编译:最终链接失败:错误值 collect2:错误:ld 返回 1 个退出状态
-
是否可以在我的 ubuntu 18.04 上安装与 debian 9 匹配的工具链?
-
对不起,你说的静态链接是对的:我忘了你自己在建一个库。您可能可以在 chroot 中设置现有的 Debian 二进制文件,或者从 GCC 源代码开始并构建一个针对 Debian 库的交叉编译器?
标签: linux ubuntu gcc glibc libc