- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在寻找这个问题的答案,但我似乎无法调试问题!
所以,这就是我所拥有的。
我已经通过 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
其他发现:
我确信我遗漏了一些明显的东西,但我承认我需要帮助。
编辑:
所以我把它隔离成一个单独的 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/
我一直在寻找这个问题的答案,但我似乎无法调试问题! 所以,这就是我所拥有的。 我已经通过 homebrew (Mac OSX Mavericks) 版本 1.55.0 安装了 boost。 其他 bo
我正在运行一个包含多个子目录的目录。我正在使用 recursive_directory_iterator。我有目录 asr->collections->(多个目录和几个文本文件) #include
我目前正在捕获来自 boost::filesystem::is_directory 的错误,并通过在异常上调用“what()”向用户显示错误。这给出了失败的原因,但错误对用户来说很奇怪。例如: boo
boost::filesystem::recursive_directory_iterator end, begin(directory); auto num_of_files=std::count_
我正在使用 boost 文件系统获取当前目录的路径,然后检查该目录是否存在。 is_directory()没问题,但是 exists()在同一条路上失败了,我错过了什么吗? 示例代码(boost 1.
我有一些代码可以遍历目录中的文件并对非目录文件执行有用的操作,如下所示: namespace bfs = boost::filesystem; for (bfs::directory_iterator
使用 Linux OpenSUSE 12.3 32 位 我正在观看 Youtube 上 Bartosz Milewski 的 c++11 并发视频。在第 5 部分中,他在示例中使用了自己的 files
我是一名优秀的程序员,十分优秀!