我对使用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不是仅 header 库。您必须使用-L-l标志链接到库。 (并确保已正确构建库)。您需要同时链接到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参数)

然后,在能够运行可执行文件之前,您必须让加载程序知道在哪里寻找这些库。您可以使用以下命令执行此操作:
export DYLD_LIBRARY_PATH=/path/to/boost/bib:$DYLD_LIBRARY_PATH

为了使其自动化,我建议使用像 cmake 这样的构建系统,而不只是命令行。

10-05 23:00
查看更多