我试图用ARM处理器运行uClinux来编译嵌入式系统的"hello“C应用程序。我在用这个工具链
当我使用-static编译标志编译C应用程序时,应用程序运行良好。当我移除-static标志时-我得到了一个错误:can't load library 'libc.so.6'
不存在于目标上的libc.so.6,进入目标设备上的/lib文件夹,符号链接libc.so.0指向libuClibc-0.9.33.2.so
我如何“告诉”编译器与libc.so.0链接?
发布于 2014-04-18 09:21:03
似乎您正在使用的工具链是为glibc构建的。但是目标板已经安装了uClibc。
这两个库是不兼容的。
在运行时,它们是不兼容的,而在编译时它们是不兼容的。
您不能“告诉编译器使用不同的和不兼容的库。
您需要获得专门为uClibc构建的工具链,而不是glibc/eglibc。
站点gnuarm.com曾经有一些可靠的工具链,但是那个站点已经不复存在了。
您可以尝试使用曲柄-NG构建自己的工具链,这比构建单个工具链包容易得多。尝试arm-unknown-linux-uclibcgnueabi配置并根据您的需要定制它。
发布于 2018-04-09 12:30:21
当我将一个简单的helloworld从openwrt工具链(使用uClibc,目标IPQ4028)交叉编译到我的路由器Gl-iNet-B1300时,我遇到了类似的问题。成功编译后,我将文件scp到路由器,并在尝试执行此错误时出现如下情况:
root@GL-B1300:~# ./helloworld
/root/helloworld: can't load library 'libc.so.0'当我运行'ls -la \ grep libc.so‘时。关于/lib/,出现了这样的情况:
libc.so.1 -> libuClibc-1.0.14.so因此,由于libc.so.0不存在,我只是在/lib/中创建了一个链接。
lib/# ln -s libc.so.1 libc.so.0再次运行'ls -la \ grep libc.so‘:
libc.so.0 -> libc.so.1
libc.so.1 -> libuClibc-1.0.14.so然后,执行该文件:
root@GL-B1300:~# ./helloworld
Hell! O' world, why won't my code compile?
The value of pi is 3.141593我想真正的问题是,我使用的工具链并不适合路由器固件。
发布于 2014-04-18 09:32:07
如果删除XXX.lib,则应该在代码中添加"load -I“代码。静态链接和动态链接有一些不同,你可以在Google中找到。
https://stackoverflow.com/questions/23150747
复制相似问题