0

尽量保持简短的背景:我正在开发一个非常大的 C++ 应用程序,它主要使用 32 位 Ubuntu 服务器 12.04 上的库进行编译,但有一些例外:libsdl1.2-dev、libedit-dev 和 uuid-开发(安装了 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

我不知道从哪里开始寻找,或者哪些工具对调试有用。任何帮助是极大的赞赏!

4

1 回答 1

0

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

于 2013-12-20T01:24:15.427 回答