【发布时间】:2014-07-20 06:27:32
【问题描述】:
我一直在寻找这个问题的答案,但我似乎无法调试问题!
所以,这就是我所拥有的。
我已经通过 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;
}
输出的结果总是来自 boost::system::error_code 的system: 2
其他发现:
- 尝试打印路径时,应用程序崩溃
- 我已经用 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:
这里 cmets 中的每个请求是 /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
【问题讨论】:
-
当您尝试打印路径时程序崩溃的事实是可疑的。也许您在程序的其他地方发生了内存损坏?尝试制作一个绝对最小的示例程序(例如,只是您发布的代码,修剪并放入
main函数 - 不是 Qt),看看那里会发生什么。 -
我已经做到了。在调试时
current_path顺便也给了我一个空字符串 -
你能告诉我们
Homebrew/Cellar/boost/1.55.0_1/INSTALL_RECEIPT.json的内容吗?我无法使用自制编译的 boost 在 OS X Mavericks 上重现您的失败。 -
@sharth 我已将其添加到原始帖子中。
-
“system:2”错误消息表示 ENOENT(没有这样的文件或目录)。这个问题还能重现吗?我目前没有 Mac 来测试它,并且代码在当前的 Linux 机器上适用于我。
标签: c++ macos boost boost-filesystem