我正在尝试为使用运行 uClinux 的 ARM 处理器的嵌入式系统编译“hello world”C 应用程序。 我正在使用这个 toolchain
当我使用 -static 编译标志编译 C 应用程序时,该应用程序运行良好。
当我删除 -static 标志时 - 我收到一个错误:can't load library 'libc.so.6'
libc.so.6 在目标上不存在, 进入目标设备上的/lib 文件夹,符号链接(symbolic link) libc.so.0 指向 libuClibc-0.9.33.2.so
我如何“告诉”编译器与 libc.so.0 链接?
最佳答案
从 openwrt 工具链(使用 uClibc,目标 IPQ4028)交叉编译一个简单的 helloworld 到我的路由器 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
我想这里真正的问题是我使用的工具链不是路由器固件的正确工具链。
关于linux - uclinux - 与 libc.so.0 库的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23150747/