【问题标题】:Cross compiled app linking with wrong library?交叉编译的应用程序链接到错误的库?
【发布时间】:2013-10-30 04:27:24
【问题描述】:

尽量保持简短的背景:我正在开发一个非常大的 C++ 应用程序,它主要使用 32 位 Ubuntu 服务器 12.04 上的库进行编译,但有一些例外:libsdl1.2-dev、libedit-dev、和 uuid-dev(与 apt-get 一起安装)。除非出现错误,否则我们的构建系统会包装/隐藏大部分输出。

我正在尝试使用工具链为不同的操作系统交叉编译应用程序。主机构建机器是 Ubuntu 12.04,目标操作系统是内部 linux 操作系统。工具链包含大多数标准的 linux 库,因此,对于缺少的库(如 libedit 和 libSDL),我只是在作弊(现在),只是在工具链中创建软链接以指向 Ubuntu 机器上的那些。

交叉编译的应用程序在链接器阶段 (ld) 失败并出现以下错误:

<toolchain>/bin/ld: warning: libbsd.so.0, needed by <toolchain>/lib/libedit.so, not found (try using -rpath or -rpath-link)

...所以我在非交叉编译的二进制文件上运行 'ldd' 以找到 libbsd,然后就这样做了

ln -s /lib/libbsd.so.0 <toolchain>/lib/libbsd.so.0 

我已经为几个不同的库做了这个来克服错误。

问题:现在我的作弊适得其反,我看到了:

blah.cpp:46: more undefined references to `__stack_chk_guard' follow
collect2: error: ld returned 1 exit status

我不知道从哪里开始寻找,也不知道哪些工具对调试有用。非常感谢任何帮助!

【问题讨论】:

  • 您不能链接到针对不同架构或系统编译的库。您唯一的选择是为您的目标交叉编译缺少的库。不作弊!
  • 看起来您的应用程序有一些额外的编译器标志,这些标志在构建其他库或工具链的标准库时没有使用。 __stack_chk_guard 属于 GCC's stack smashing protector

标签: linker compiler-errors linker-errors cross-compiling


【解决方案1】:

我只是添加了-lssp 链接器标志,一切都被清除了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多