首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::filesystem出现未定义的引用错误,尽管使用了BOOST_NO_CXX11_SCOPED_ENUMS

boost::filesystem出现未定义的引用错误,尽管使用了BOOST_NO_CXX11_SCOPED_ENUMS
EN

Stack Overflow用户
提问于 2017-01-08 16:51:03
回答 2查看 2.8K关注 0票数 2

我遇到了Boost的文件系统lib (1.60.0)的问题。在花了几个小时仔细阅读我的代码后,我认为这是我做错了什么,我尝试运行Boost自己的文件系统示例,但也遇到了同样的问题。所有这些在OSX上用gcc编译都很好用,但在Ubuntu14.04上就不行了。

我尝试在代码中定义BOOST_NO_CXX11_SCOPED_ENUMS,也尝试在运行g++时将其作为参数。我还试着删除-std=c++11 (我在一个案例中看到,这似乎对遇到这个问题的人有帮助)。无论如何,它在Ubuntu上总是失败。我使用的Boost示例如下:

代码语言:javascript
复制
// tut1
#include <iostream>

#define BOOST_NO_CXX11_SCOPED_ENUMS
#include <boost/filesystem.hpp>
using namespace boost::filesystem;

int main(int argc, char* argv[])
{
  if (argc < 2)
  {
    std::cout << "Usage: tut1 path\n";
    return 1;
  }
  std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
  return 0;
}

尝试编译的结果如下所示:

代码语言:javascript
复制
vagrant@testing:~/boost_fs_test$ g++ -I/boost/1_60_0/include -L/boost/1_60_0/lib -lboost_system -lboost_filesystem test2.cpp -o test2
/tmp/cck0AVVX.o: In function `__static_initialization_and_destruction_0(int, int)':
test2.cpp:(.text+0x105): undefined reference to `boost::system::generic_category()'
test2.cpp:(.text+0x111): undefined reference to `boost::system::generic_category()'
test2.cpp:(.text+0x11d): undefined reference to `boost::system::system_category()'
/tmp/cck0AVVX.o: In function `boost::filesystem::file_size(boost::filesystem::path const&)':
test2.cpp:(.text._ZN5boost10filesystem9file_sizeERKNS0_4pathE[_ZN5boost10filesystem9file_sizeERKNS0_4pathE]+0x19): undefined reference to `boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)'
collect2: error: ld returned 1 exit status

vagrant@testing:~/boost_fs_test$ g++ -std=c++11 -I/boost/1_60_0/include -L/boost/1_60_0/lib -lboost_system -lboost_filesystem test2.cpp -o test2
/tmp/cceGCjpc.o: In function `__static_initialization_and_destruction_0(int, int)':
test2.cpp:(.text+0x105): undefined reference to `boost::system::generic_category()'
test2.cpp:(.text+0x111): undefined reference to `boost::system::generic_category()'
test2.cpp:(.text+0x11d): undefined reference to `boost::system::system_category()'
/tmp/cceGCjpc.o: In function `boost::filesystem::file_size(boost::filesystem::path const&)':
test2.cpp:(.text._ZN5boost10filesystem9file_sizeERKNS0_4pathE[_ZN5boost10filesystem9file_sizeERKNS0_4pathE]+0x19): undefined reference to `boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)'
collect2: error: ld returned 1 exit status

我再次检查了我是如何安装Boost的,一切看起来都是正确的。libs绝对位于正确的位置:

代码语言:javascript
复制
-rw-rw-r-- 1 vagrant vagrant 237886 Jan  8 08:41 libboost_filesystem.a
lrwxrwxrwx 1 vagrant vagrant     29 Jan  8 08:40 libboost_filesystem.so -> libboost_filesystem.so.1.60.0
-rwxrwxr-x 1 vagrant vagrant 126186 Jan  8 08:40 libboost_filesystem.so.1.60.0
-rw-rw-r-- 1 vagrant vagrant  49226 Jan  8 08:41 libboost_system.a
lrwxrwxrwx 1 vagrant vagrant     25 Jan  8 08:40 libboost_system.so -> libboost_system.so.1.60.0
-rwxrwxr-x 1 vagrant vagrant  20469 Jan  8 08:40 libboost_system.so.1.60.0

不过,完全相同的代码在OSX上编译得很好:

代码语言:javascript
复制
jack-burton:boost_fs fny$ g++ -std=c++11 -I/usr/local/Cellar/boost/1.60.0_1/include -L/usr/local/Cellar/boost/1.60.0_1/lib -lboost_system -lboost_filesystem test2.cpp -o test2
jack-burton:boost_fs fny$ ls
test2       test2.cpp
jack-burton:boost_fs fny$ ./test2 test2.cpp
test2.cpp 321

我真的不确定我错过了什么。出于好奇,我尝试使用apt安装Boost (它安装了1.54),但也遇到了同样的问题。

EN

回答 2

Stack Overflow用户

发布于 2017-01-09 15:05:49

好吧,我通过一些令人沮丧的试验和错误解决了这个问题。:)

在CentOS和Ubuntu上,我通过安装Boost让它正常工作,如下所示:

sudo ./b2 install link=static --with-system --with-filesystem

然后,使用以下命令进行编译:

g++ -std=c++11 -I/usr/local/include -L/usr/local/lib test.cpp -lboost_system -lboost_filesystem -o test

关键似乎是在gcc命令中的库的位置。将它们放在源文件之后似乎起到了作用。我正处于将Boost从项目中完全剥离出来的阶段,但值得庆幸的是,这起到了作用,使我不必重写大量代码。这可能是个非常愚蠢的错误但是直到..。

票数 3
EN

Stack Overflow用户

发布于 2017-01-08 17:29:27

看起来您正在链接编译为共享库的boost,请尝试使用-DBOOST_ALL_DYN_LINK编译或显式将boost编译为静态库./b2 link=static

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41530985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档