uclinux - 与libc.so.0库链接

时间:2014-04-18 08:53:47

标签: linux embedded-linux libc uclibc uclinux

我试图编译"你好世界"用于运行uClinux的ARM处理器的嵌入式系统的C应用程序。 我正在使用此toolchain

当我使用-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链接?

3 个答案:

答案 0 :(得分:2)

看起来像你正在使用的工具链是为glibc而构建的。但目标板上安装了uClibc 这两个库是不兼容的 在运行时它们是不兼容的,并且在编译时它们是不兼容的 你不能告诉编译器使用不同的&不兼容的图书馆 您需要获得专门为uClibc而不是glibc / eglibc构建的工具链。

网站gnuarm.com曾经拥有一些可靠的工具链,但该网站已不复存在。

您可以尝试使用crosstool-NG构建自己的工具链,这比构建单个工具链包要容易得多。尝试arm-unknown-linux-uclibcgnueabi配置并根据您的需要进行自定义。

答案 1 :(得分:1)

当从openwrt工具链(使用uClibc,目标IPQ4028)到我的路由器Gl-iNet-B1300交叉编译一个简单的helloworld时,我遇到了类似的问题。 编译成功后,我将文件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

我想这里真正的问题是我使用的工具链不适合路由器固件。

答案 2 :(得分:-1)

如果删除-I,则应在代码中添加代码“load XXX.lib”。 您可以在Google中找到静态和动态链接之间的一些差异。