2010-02-04 71 views
4

我運行一個應用程序GLFW(我在用C寫++)Mac捆綁應用程序的「pwd」是什麼?

我運行它,如下所示:

./prog.app/Contents/MacOS/prog # from the command line 

然而,我的代碼無法正確讀取相對徑處理文件。

所以我相信這個Mac Bundle正在改變我的當前目錄。

1)它改變了什麼? 2)我可以控制這個嗎?

謝謝!

回答

1

在啓動應用程序時,不要對當前工作目錄做任何假設。 Finder對此有相當的一致性,但它不是啓動應用程序的唯一方式。例如,在Xcode下進行調試時,初始工作目錄會有所不同,還有其他各種方法可能會或可能不會按預期設置工作目錄。你應該從一個完全不相關的目錄中的命令行啓動它來測試你的應用程序 - 如果它仍然在這種情況下找到它的文件,那麼你的狀態良好。

2

通常這是用戶的主目錄。我不確定這是否有保證,但可以在Cocoa應用程序中使用chdir()。根據您的要求,如果您使用文件系統書籤(10.6+)或別名(更早),用戶可能會有更好的體驗。甚至絕對路徑,這對於改變工作目錄仍然很有效。

4

你也許可以使用這段代碼來找出prog的位置。

#include <mach-o/dyld.h> 

char exe_path[MAXPATHLEN]; 
char link_path[MAXPATHLEN]; 

uint32_t size = sizeof(exe_path); 
if (_NSGetExecutablePath(exe_path, &size) != 0) 
    assert(); 

if (realpath(exe_path, link_path) == 0) 
    assert(); 

return link_path; 
0

如果你看看GLFW源代碼,你會發現,在init中它會明確地改變當前目錄。 Look here並向下滾動到第236行左右(或搜索chdir)。

我發現你的SO問題,因爲我目前正試圖理解爲什麼GLFW在初始化過程中做了顯式的chdir。我發現這是因爲我有一個適用於除OSX以外的所有平臺的程序。在OSX上,它無法使用相對路徑找到它的數據文件。我的臨時解決方案是在main啓動時獲取當前目錄,並在初始化GLFW後重置當前目錄。

+1

不幸的是,鏈接被破壞。 – Vortexfive 2018-01-08 08:17:28