【问题标题】:boost::filesystem Undefined symbols for architecture x86_64boost::filesystem 架构 x86_64 的未定义符号
【发布时间】:2015-08-07 15:26:17
【问题描述】:

我对使用 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

有人可以解释错误的要求吗?我做错了什么?

【问题讨论】:

    标签: c++ macos boost g++


    【解决方案1】:

    boost.filesystem 不是一个只有头文件的库。您必须使用 -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 这样的构建系统,而不仅仅是命令行。

    【讨论】:

    • 此命令有效并生成了一个 .exe 文件。 g++ -I boost_1_58_0 -Lboost_1_58_0/lib/ -lboost_filesystem -lboost_system main.cpp -o example。但是,当我运行 .exe 文件时出现错误:dyld: Library not loaded: libboost_filesystem.dylib
    • 您还应指定库的路径以供运行时加载。在 linux 中,在运行程序之前它是 export LD_LIBRARY_PATH=/path/to/boost/lib:$LD_LIBRARY_PATH。在 MacOS 上可能会有些不同,我不太清楚。
    • 在 OSX 上看起来是 DYLD_LIBRARY_PATH。更新了答案。
    • 好的,DYLD_LIBRARY_PATH 等于 boost_1_58_0/lib/ 所在的路径我检查以确认使用:echo $DYLD_LIBRARY_PATH 并且我可以确认 libboost_filesystem.dylib 位于该位置。但是我仍然得到同样的错误? dyld: Library not loaded: libboost_filesystem.dylib
    猜你喜欢
    • 2015-06-15
    • 2020-12-10
    • 2015-06-03
    • 1970-01-01
    • 2014-08-07
    • 2012-07-20
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多