2017-05-31 14 views
0

我已經創建了一個C++程序包中的deb包。我遵循這個簡單的指南https://ubuntuforums.org/showthread.php?t=910717。我成功安裝了deb在usr/local/bin。
但是我正面臨以下問題。當我從主目錄運行我的應用程序時,C++主程序啓動,但是當它到達需要從設置文件中讀取的位置時,它的行爲就好像它不存在一樣。該文件位於與C++可執行文件位於同一位置的文件夾中。
另一方面,當我去 - > usr/local/bin並從那裏運行我的C++應用程序時,不存在任何問題。我也給所有文件提供了讀寫和執行權限。 由於/ usr/local/bin已存在於我的路徑中,爲何會出現此錯誤?從主目錄執行的Ubuntu 16.04的usr/local/bin中安裝的C++應用程序無法正確運行

+0

你的文件是由相對路徑給出的? –

回答

1

因爲應用程序具有當前路徑作爲路徑,而不是其安裝位置。你需要找出應用程序路徑正確加載文件 - 如果你使用Qt你有applicationPath,如果不是你必須:

char szTmp[32]; 
sprintf(szTmp, "/proc/%d/exe", getpid()); 
int bytes = MIN(readlink(szTmp, pBuf, len), len - 1); 
if(bytes >= 0) 
     pBuf[bytes] = '\0'; 
return bytes; 

以確定應用程序的安裝文件夾,並加載基於該文件。

+0

感謝您的快速響應。目前我正在使用poco庫,尤其是Poco :: Path :: current()來建立設置文件的路徑。所以你的意思是,即使它安裝在usr/local/bin中,當我從主目錄運行時,Poco :: Path :: current()返回主目錄? – dk13

+0

exacrly。 current()是當前目錄,而不是已安裝的路徑。 –

+0

再次感謝。最後一個問題,因爲我沒有以前的Linux安裝經驗。由於該應用程序將安裝在我選擇的特定位置,因此加載/ usr/local/bin/C++應用程序的絕對路徑效率不高。這種方法有什麼不利嗎? – dk13

相關問題