动态链接出现问题?
Closed this issue · 4 comments
我们使用 loongarch64-clfs-2022-03-03-cross-tools-gcc_and_clang-full.tar.xz 工具链,在 Debian Linux x86_64 上编译以下源代码:
#include <stdio.h>
int main(void) {
printf("Hello LoongArch!\n");
return 0;
}
使用的编译指令为:
clang --target=loongarch64-unknown-linux-gnu hw.c -o hw
由于 Debian 上没有安装过 LLVM,所以可以确定使用的就是工具链的 clang。
将编译生成的二进制文件上传到 Loongnix-Server Linux 8 loongarch64 的机器上无法运行,提示:
-bash: ./hw: No such file or directory
再使用
clang --target=loongarch64-unknown-linux-gnu hw.c -static -o hw
在同样的龙芯机器上可以正常运行,故怀疑动态链接存在问题?
CLFS工具链的.interp是"/lib64/ld-linux-loongarch-lp64d.so.1",Loongnix-Server可能无该文件,创建软链接试试?
CLFS工具链的.interp是"/lib64/ld-linux-loongarch-lp64d.so.1",Loongnix-Server可能无该文件,创建软链接试试?
我们尝试使用 sudo ln -s /lib64/ld.so.1 /lib64/ld-linux-loongarch-lp64d.so.1
创建了软链接,运行时报错:
./hw: /lib64/libc.so.6: version
GLIBC_2.36' not found (required by ./hw)`
感觉是工具链的 GLIBC 版本太高了,但是我们已经将 Loongnix 上的 GLIBC 用 yum 升级到最新版本了。所以我们考虑:
- 手动把 loongnix 上的 GLIBC 升到最新版本
- 使用旧版本的工具链(但我们不确定旧版本的工具链是否有足够低版本的 GLIBC ?)
对于这种情况,有没有推荐的解决方案呢?
CLFS工具链的.interp是"/lib64/ld-linux-loongarch-lp64d.so.1",Loongnix-Server可能无该文件,创建软链接试试?
我们尝试使用
sudo ln -s /lib64/ld.so.1 /lib64/ld-linux-loongarch-lp64d.so.1
创建了软链接,运行时报错:
./hw: /lib64/libc.so.6: version
GLIBC_2.36' not found (required by ./hw)`感觉是工具链的 GLIBC 版本太高了,但是我们已经将 Loongnix 上的 GLIBC 用 yum 升级到最新版本了。所以我们考虑:
- 手动把 loongnix 上的 GLIBC 升到最新版本
- 使用旧版本的工具链(但我们不确定旧版本的工具链是否有足够低版本的 GLIBC ?)
对于这种情况,有没有推荐的解决方案呢?
我想您是需要一个能进行交叉编译的工具链。但实际上Loongnix的ABI与CLFS的ABI并不一致(大佬们区分为新世界或旧世界,我的理解是,进入社区的ABI为新世界,在Loongnix的为旧世界)。
您尝试了CLFS工具链出现了interp的问题就是新旧ABI导致的问题,但是我未找到旧世界的工具链。
如果想使用旧ABI工具链,我并没有好的解决方案。
如果想了解CLFS,可以参考 https://github.com/sunhaiyong1978/CLFS-for-LoongArch/
当然,如果只是简单的编译一些文件并验证(不使用到太多库的话),可以交叉编译后,制作CLFS,并上传到CLFS上运行。
CLFS工具链的.interp是"/lib64/ld-linux-loongarch-lp64d.so.1",Loongnix-Server可能无该文件,创建软链接试试?
我们尝试使用
sudo ln -s /lib64/ld.so.1 /lib64/ld-linux-loongarch-lp64d.so.1
创建了软链接,运行时报错:
./hw: /lib64/libc.so.6: version
GLIBC_2.36' not found (required by ./hw)`
感觉是工具链的 GLIBC 版本太高了,但是我们已经将 Loongnix 上的 GLIBC 用 yum 升级到最新版本了。所以我们考虑:
- 手动把 loongnix 上的 GLIBC 升到最新版本
- 使用旧版本的工具链(但我们不确定旧版本的工具链是否有足够低版本的 GLIBC ?)
对于这种情况,有没有推荐的解决方案呢?
我想您是需要一个能进行交叉编译的工具链。但实际上Loongnix的ABI与CLFS的ABI并不一致(大佬们区分为新世界或旧世界,我的理解是,进入社区的ABI为新世界,在Loongnix的为旧世界)。 您尝试了CLFS工具链出现了interp的问题就是新旧ABI导致的问题,但是我未找到旧世界的工具链。 如果想使用旧ABI工具链,我并没有好的解决方案。 如果想了解CLFS,可以参考 https://github.com/sunhaiyong1978/CLFS-for-LoongArch/ 当然,如果只是简单的编译一些文件并验证(不使用到太多库的话),可以交叉编译后,制作CLFS,并上传到CLFS上运行。
感谢您的解答!