gpt4 book ai didi

c++ - 为什么我的应用程序会出现C++ unknown reference link错误,而linux中的库却不会

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:45 26 4
gpt4 key购买 nike

现在我正在构建一个 C++ 动态库 libabc.so 和一个基于此库的应用程序 test 在 linux 中。 libabc.so 会调用boost动态库libboost.so。我可以很好地编译libabc.so,没有发现任何错误。如果我在 libabc.so 上使用 ldd 命令,我可以很容易地观察到这个库依赖于 libboost.so。但是,当我编译应用程序test时,出现以下链接错误:

abc.so: undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
collect2: ld returned 1 exit status

不知道问题出在哪里。当我编译 test 程序时,我确定我将它与 libabc.solibboost.so 链接起来。我还在链接时更改了 libabc.solibboost.so 的顺序,只是为了确保给出正确的库顺序。有任何想法吗?谢谢。

最佳答案

有问题的函数被定义为采用不同的参数,具体取决于程序是编译为 C++03 还是 C++11。

void boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option::enum_type, boost::system::error_code*) // pre-C++11

void boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*) // C++11

在我看来这是一个 Boost 错误。

因此,如果在程序中使用此函数,则 Boost 和程序都必须在 C++11 支持下编译,或两者都不支持。否则程序将在链接阶段失败。

Linux 中的共享库通常允许有未解析的引用,这不会导致它们的链接失败。

关于c++ - 为什么我的应用程序会出现C++ unknown reference link错误,而linux中的库却不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26689936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com