我有一个基于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
旗帜正在做一些我不理解的有趣事情的可能性,这可能是问题的根源。
答案 0 :(得分:0)
解决。最后,问题源于-frepo
标志。这是编译一个名为legacy_abi.cpp
的文件所必需的,该文件是我的库的一部分,允许第三方开发人员使用旧的和更奇特的操作系统/编译器。 Pi上不需要这样做,所以我只是从构建中的违规文件中删除它,删除-frepo
标志并开心快乐。
最后一点,天赋(对于Pi来说,无论如何)只能提升到1.49(据我所知)。我的项目需要提升&gt; = 1.50。这是一个继承的项目,所以我仍然发现它的所有小特质。