尝试保持背景简短:我正在开发一个非常大的C ++应用程序,它可以很好地使用32位Ubuntu服务器12.04上的库进行编译,但有一些例外:libsdl1.2-dev,libedit-dev,和uuid-dev(与apt-get一起安装)。除非出现错误,否则我们的构建系统会包装/隐藏大部分输出。
我正在尝试使用工具链来交叉编译不同操作系统的应用程序。主机构建机器是Ubuntu 12.04,目标OS是内部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
我不知道从哪里开始查看,或者哪些工具在调试时很有用。非常感谢任何帮助!
答案 0 :(得分:0)
我只是添加了-lssp
链接器标志,所有内容都被清除了!