【问题标题】:Compiling with non primary libc,(i.e eglibc,uClibc)使用非主 libc 编译,(即 eglibc、uClibc)
【发布时间】:2012-03-16 09:54:42
【问题描述】:

我在嵌入式环境中工作。我有一个用于 ARM 架构的交叉编译器,其中 eglibc 作为它的主库(即默认的 libc 与工具链一起提供)。现在我希望一些应用程序与uClibc 链接。所以我用那个工具链编译了uClibc。现在在尝试使用uClibc 编译和链接应用程序时,出现错误。它与工具链的默认库链接。我认为在同一台机器上可以有两个不同的 libcs​​(例如 libc、uClibc)。

我在网上搜索,得到以下内容

  1. Multiple glibc libraries on a single host

    按照它的建议,我做了以下操作

    $arm-unknown-linux-gnueabi-gcc -c test.c -o TEST
    
    $arm-linux-gnueabi-gcc TEST -o dynamic_test_with_new_opts -Wl,rpath=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib -Wl,-dynamic-linker=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib/ld-uClibc.so.0 
    

    在这种情况下,它与eglibc 的默认libc.so.6 链接

  2. How to link to a different libc file?

    正如上面的链接所建议的,我什至尝试了以下方法:

    $arm-unknown-linux-gnueabi-gcc -Xlinker -rpath=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib -Xlinker -I/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib/ld-uClibc-0.9.32.1.so test.c -o  dynamic_test_with_linker_options 
    

    在这种情况下,它也与eglibc 的默认libc.so.6 链接

我哪里出错了?我真的陷入了困境。有人可以解释一下吗?

【问题讨论】:

    标签: linux gcc arm glibc uclibc


    【解决方案1】:

    我认为,您需要重建编译器才能做到这一点。编译器需要进行不同的配置才能使用 uClibc。

    【讨论】:

    • 为了完整起见,您能否澄清一下如何告诉编译器/链接器默认情况下在哪里查找库?有链接吗?我正在使用musl-cross,但不知道如何使用其他东西,但默认使用/lib。构建 gcc 时我应该通过哪些选项?
    • 您可以弄乱规范文件,但这是另一个问题的主题。这个问题是关于一个同时针对 Glibc 和 uClibc 的编译器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多