在ARM体系结构上构建时,使用boost的动态库具有未定义的引用

时间:2015-06-24 21:54:45

标签: c++ linux boost linker raspberry-pi

我有一个基于C ++的动态库,我为大型3操作系统构建,它们非常依赖于提升。目前,我正在为树莓派编译它。我花了一段时间才找到神奇的词来让图书馆甚至构建(-frepo作为编译器标志是关键,但我承认我不确定为什么会这样)。

现在,当我尝试链接到库时,我得到一个未定义的引用'我的图书馆所做的每次加强调用都会出错,即:

//`libmylib.so`: undeifined reference to `boost::shared_ptr<boost::detail::thread_data_base>::shared_ptr()'

当我构建libmylib.so时,我还会将自定义版本的boost构建为libboost.a。这些都可以在其他操作系统和非ARM体系结构上进行编译和链接,因此我尝试将-lboost作为其中一个标志,但我仍然从libmylib.so获得了大量未定义的引用错误。

毋庸置疑,我的所有路径都是正确的。

看起来,树莓派上的链接行为与其他Linux系统上的行为略有不同。例如,我构建了一个使用libmythread.a的静态库(libpthread)。当我链接到libmythread.a时,我也会得到未定义的引用错误,除非我在构建配方中也使用-lpthread。在运行Fedora的Thinkpad上,我永远不必这样做,因为我在静态库-lpthread的编译中包含了libmythread.a

我很想找到解释这些差异的教程或指南。我也很想克服它们!

我也在传统的linux机器上尝试了相同的构建,一切都很好,没问题。至少我知道我的构建过程没问题。然而,这确实开辟了-frepo旗帜正在做一些我不理解的有趣事情的可能性,这可能是问题的根源。

1 个答案:

答案 0 :(得分:0)

解决。最后,问题源于-frepo标志。这是编译一个名为legacy_abi.cpp的文件所必需的,该文件是我的库的一部分,允许第三方开发人员使用旧的和更奇特的操作系统/编译器。 Pi上不需要这样做,所以我只是从构建中的违规文件中删除它,删除-frepo标志并开心快乐。

最后一点,天赋(对于Pi来说,无论如何)只能提升到1.49(据我所知)。我的项目需要提升&gt; = 1.50。这是一个继承的项目,所以我仍然发现它的所有小特质。