我对使用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_system
和boost_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
这样的构建系统,而不只是命令行。