体系结构x86_64的未定义符号

boost::filesystem Undefined symbols for architecture x86_64

本文关键字:未定义 符号 x86 体系结构      更新时间:2023-10-16

我是一个使用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标志链接到库。(确保图书馆已经建好了)。您需要链接到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这样的构建系统,而不是仅仅使用命令行。