boost::filesystem 未定义的体系结构符号 x86_64

boost::filesystem Undefined symbols for architecture x86_64

我对使用 GNU 很陌生。我正在尝试开始使用 boost 文件系统库,但我不断收到这些错误。我正在尝试使用 boost::filesystem.

获取当前工作目录

我的代码:

boost::filesystem::path full_path( boost::filesystem::detail::current_path() );
cout << "Current path is : " << full_path << endl;

我的命令:

g++ -I boost_1_58_0 main.cpp -o example

结果:

Undefined symbols for architecture x86_64:
  "boost::filesystem::detail::current_path(boost::system::error_code*)", referenced from:
      _main in main-1c56eb.o
  "boost::system::system_category()", referenced from:
      ___cxx_global_var_init2 in main-1c56eb.o
  "boost::system::generic_category()", referenced from:
      ___cxx_global_var_init in main-1c56eb.o
      ___cxx_global_var_init1 in main-1c56eb.o
ld: symbol(s) not found for architecture x86_64

有人可以解释一下错误的原因吗?我做错了什么?

boost.filesystem 不是一个只有头文件的库。您必须使用 -L-l 标志 link 到图书馆。 (并确保库已经正确构建)。您需要 link 到 boost_systemboost_filesystem 图书馆。 命令行可能如下所示:

g++ -Iboost_1_58_0 -Lboost_1_58_0/lib/ -lboost-filesystem -lboost_system main.cpp -o example

(将-L参数替换为libboost-filesystem.so文件所在的路径)

然后,在您能够 运行 可执行文件之前,您必须让加载程序知道到哪里寻找库。您 shell 可以使用以下命令执行此操作:

export DYLD_LIBRARY_PATH=/path/to/boost/bib:$DYLD_LIBRARY_PATH

为了让它自动运行,我建议使用像 cmake 这样的构建系统,而不仅仅是命令行。