【问题标题】:cross compiling why cant ld find shared library / how to debug further?交叉编译为什么找不到共享库/如何进一步调试?
【发布时间】:2014-09-10 19:40:35
【问题描述】:

我试图在 ubuntu 上为我的 arm-router 交叉编译和链接聚合,但出现以下错误。在过去,我认为我已经能够通过设置适当的环境变量来解决这个问题,但这次不起作用。谁能帮我弄清楚为什么这可能不起作用:

/home/ubuntu/Downloads/toolchain-arm_cortex-a9_gcc-4.9-linaro_musl-1.1.2_eabi/bin/../lib64/gcc/arm-openwrt-linux-muslgnueabi/4.9.1/../../../../arm-openwrt-linux-muslgnueabi/bin/ld:

cannot find -lpopt

但是 libpopt.so 存在于: lrwxrwxrwx 1 root root 34 Sep 10 12:46 /lib/x86_64-linux-gnu/libpopt.so -> /lib/x86_64-linux-gnu/libpopt.so.0

我设置了以下环境变量,无奈之下,无济于事。

LIBRARY_PATH=/lib/x86_64-linux-gnu/ LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ PATH=/lib/x86_64-linux-gnu/:/usr/include/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

认为这可能是由于它可能是目标体系结构问题引起的(即,也许我需要为交叉编译的目标构建 libpopt.so)我将 libpopt.so 从路由器复制到我的 ubuntu 并设置再次路径。再次无济于事。

我可能做错了什么?

谢谢

【问题讨论】:

    标签: c gcc linker ld


    【解决方案1】:

    请不要将 ARM 二进制文件复制到 /lib/x86_64-linux-gnu。这是搞乱 Linux 安装的好方法。

    相反,为交叉编译依赖项创建一个目录,将外部库放在那里,然后使用 -L 选项将该目录放在链接器搜索路径中。

    【讨论】:

    • 是的,我实际上并没有这样做,尽管通过编辑我让它听起来像我做的那样。我更新了我之前的帖子。谢谢
    【解决方案2】:

    我必须在 Makefile 中使用 -L 指定库的路径,如下所示: -L/lib/x86_64-linux-gnu/

    另外,我确实必须使用 libpopt.so 的目标架构版本,我将其复制到一个新目录并在 -L/home/Downloads/lib/ 的参数中使用它。无论出于何种原因,LIBRARY_PATH 和 LD_LIBRARY_PATH 都没有被拾取。

    【讨论】:

    • LD_LIBRARY_PATH 用于可执行文件的运行时,而不是用于指定链接时在哪里查找库。
    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 2016-12-12
    • 2016-10-28
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多