尽量保持简短的背景:我正在开发一个非常大的 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
我不知道从哪里开始寻找,或者哪些工具对调试有用。任何帮助是极大的赞赏!