gpt4 book ai didi

c++ - boost 文件系统。 is_directory 从不工作

转载 作者:IT老高 更新时间:2023-10-28 22:30:02 27 4
gpt4 key购买 nike

我一直在寻找这个问题的答案,但我似乎无法调试问题!

所以,这就是我所拥有的。

我已经通过 homebrew (Mac OSX Mavericks) 版本 1.55.0 安装了 boost。

其他 boost 库工作正常,但 boost::filesystem 似乎无法与实际文件系统交互。

这就是我链接它的方式(使用 QT)

macx: LIBS += -L$$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/ -lboost_system-mt
macx: LIBS += -L$$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/ -lboost_filesystem-mt

INCLUDEPATH += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/include
DEPENDPATH += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/include

macx: PRE_TARGETDEPS += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/libboost_filesystem.a
macx: PRE_TARGETDEPS += $$PWD/../../../../../usr/local/Cellar/boost/1.55.0_1/lib/libboost_system.a

请注意,这是 qt creator 通过添加库界面自动生成的。

这是我正在运行的代码,但它永远无法运行。 (意思是 isDir 总是 false)

namespace fs = boost::filesystem;
boost::system::error_code c;
fs::path path("/path/to/some/dir"); // Have tried '.' '/' './' '/usr' Everything!
bool isDir = boost::filesystem::is_directory(path, c);

if(!isDir) {
std::cout << "Error Response: " << c << std::endl;
ui->directoryEdit->setStyleSheet("background-color: red;");
}
else {
std::cout << "Is a directory!" << std::endl;
}

输出的结果总是 system: 2 from boost::system::error_code

其他发现:

  • 尝试打印路径时,应用程序崩溃
  • 我已经用 c++11 而不是标准重新编译了 boost,但没有任何改变。

我确信我遗漏了一些明显的东西,但我承认我需要帮助。

编辑:

所以我把它隔离成一个单独的 main.cpp 文件:

#include <boost/filesystem.hpp>
#include <boost/system/error_code.hpp>
#include <iostream>
#include <string>

int main(int argc, char *argv[]) {

namespace fs = boost::filesystem;
boost::system::error_code c;
fs::path path("."); // Have tried '.' '/' './' '/usr' Everything!
bool isDir = boost::filesystem::is_directory(path, c);

if(!isDir) {
std::cout << "Error Response: " << c << std::endl;
}
else {
std::cout << "Is a directory!" << std::endl;
}

return 0;
}

然后我用

编译/运行
g++ test_boost.cpp -o main.out -lboost_system -lboost_filesystem
./main.out

而生成的响应是

Error Response: system:2

非常令人沮丧。打算用旧版本试试

编辑 2:

此处评论中的每个请求是 /usr/local/Cellar/boost/1.55​​.0_1/INSTALL_RECEIPT.json

{"compiler":"clang","HEAD":"4bf4ee77fa858bb5e56406504cf86564bd5ece3d","built_as_bottle":true,"stdlib":"libcxx","tapped_from":"Homebrew/homebrew","unused_options":["--with-mpi","--c++11","--with-icu","--without-static","--with-python","--universal","--without-single"],"poured_from_bottle":true,"used_options":[],"time":1399557362}  

编辑 3:

g++ 版本:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

c++ 版本:

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

最佳答案

问题不在于您的代码,因为您的 MCVE在在线编译器上编译并提供成功的输出。一种可能的解释是,正如问题 crash when using boost 1.55.0 from an application that is based on libstdc++ on Mac 所建议的,Boost 是使用与您正在编译程序的标准库不同的标准库编译的。 . libc++libstdc++ 不是二进制兼容的,因为它们实现了字符串(现在可能不正确,但过去绝对正确。)另外请记住在 Mac 上,g++ 可以符号链接(symbolic link)到 clang++

解决方案:

  • 使用与 Boost 相同的标准库编译您的程序。试试 clang++ -stdlib=libc++ ...clang++ -stdlib=libstdc++ ...

  • 如果您愿意,可以使用不同的标准库从源代码重新编译 Boost

关于c++ - boost 文件系统。 is_directory 从不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23955538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com