2015-04-02 10 views
3

我想使用Boost.Filesystem製作一個目錄(該目錄可以由用戶提供,因此它可能是一個嵌套目錄的路徑;全部,部分或全部目錄在那條路上可能存在開始)。當我運行程序時,會創建一個目錄,但這不是我所要求的;包含路徑的字符串似乎越來越受到損壞。我從來沒有得到相同的結果兩次,但目錄的名稱始終以冒號開頭。Boost.Filesystem create_directories mangles目錄名

小例子:

#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選項升壓)
安裝 - GCC 4.9版.2_1
- 升壓版本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不太熟悉。

回答

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?

+0

我的文件是UTF8。我沒有搞亂DYLD_LIBRARY_PATH,因爲很多網站聲稱它不是一個好主意,我也不明白爲什麼。 它看起來像是不同的庫和編譯器通常的Mac OSX問題。當我停用Macports g ++並使用預安裝的g ++時,突然問題消失了。 – Brendan 2015-04-07 14:48:49

+0

「盲目」不是一個好主意。但是它是進行非侵入式部署的關鍵機制(例如,部署到可能安裝有衝突版本庫的機器)。唯一/更好的方法是使用發行版的所有內容 - 但這通常只適用於非常大的產品/非常受歡迎的開源 – sehe 2015-04-07 14:51:53

0

我有同樣的問題的目錄名稱的損壞。我使用brew install boost和gcc使用brew install gcc6安裝了boost。

事實證明,boost是用Apple的GCC編譯器版本和源文件與原始GCC編譯器一起構建的。當我使用Apple的編譯器構建源文件時,它確實有效。

或者,使用您選擇的編譯器自行構建boost。

另請參閱相關問題的答案,https://stackoverflow.com/a/4798180/2535529