2013-10-30 71 views
0

尽量保持背景简洁:我正在研究一个非常大的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 

我不知道从哪里开始寻找,或者什么样的工具将在调试这个有用。任何帮助是极大的赞赏!

+0

无法链接针对不同架构或系统编译的库。您唯一的选择是交叉编译您的目标缺少的库。别作弊! – Peter

+2

看起来您的应用程序有一些额外的编译器标志,这些编译器标志在构建其他库或工具链的标准库时未使用。 '__stack_chk_guard'属于[GCC的堆栈粉碎保护器](http://wiki.osdev.org/GCC_Stack_Smashing_Protector)。 –

回答

0

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