我正在尝试使用Boost.Filesystem创建一个目录(该目录可以由用户提供,因此它可能是具有嵌套目录的路径;该路径中的所有,部分或者任何目录都可能存在以启动)。当我运行程序时,会创建一个目录,但这不是我要求的;包含路径的字符串似乎被破坏了。我从来没有得到两次相同的结果,但目录的名称总是以冒号开头。
一个最小的例子:
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main(int argc, char* argv[]) {
fs::path path = "junk/morejunk";
if (!fs::create_directories(path)) {
std::cerr << "Failed to create directory " << path << ".\n";
}
return(0);
}
运行它,我得到:@K%C5?
,:%C0)%E0?
和:%C0%E9%93?
等目录。
我在使Boost正确链接方面遇到了一些麻烦,但上面的程序现在编译并运行。如果有必要,可以提供以下信息:
- 我正在使用Mac(OSX 10.9.4)
- GCC和Boost都安装了MacPorts(带有+ gcc49选项的Boost)
- GCC版本4.9.2_1
- Boost版本1.57.0_1
- 我的Makefile看起来像
CC = /opt/local/bin/g++
FLAGS = -I/opt/local/include -L/opt/local/lib -lboost_system-mt -lboost_filesystem-mt
driver : driver.cpp
$(CC) $(FLAGS) -o driver driver.cpp
欢迎任何建议;已经有一段时间了,因为我已经使用了很多C ++,而且我对Boost没有太多的经验。
答案 0 :(得分:1)
在肢体上,确保将文件保存为ASCII,latin1或UTF8。
否则,您可能会从不兼容的库版本中获得未定义的行为。
您可以使用DYLD_LIBRARY_PATH
来获取首选的boost库(您链接的库)。另请参阅Is it OK to use DYLD_LIBRARY_PATH on Mac OS X? And, what's the dynamic library search algorithm with it?
答案 1 :(得分:0)
我遇到了错误的目录名称问题。我使用brew install boost
和gcc使用brew install gcc6
安装了boost。
事实证明,使用Apple的GCC编译器版本和原始GCC编译器的源文件构建了boost。当我使用Apple的编译器构建源文件时,它确实有效。
或者,使用您选择的编译器自行构建。
另请参阅相关问题的答案https://stackoverflow.com/a/4798180/2535529。