2013-08-26 73 views
2
getcwd(buff, 1024); 

說當前跟隨工作路徑;我該怎麼辦?Linux上dlopen()的有效相對路徑?

buff = "/home/online0227/my project/Tutorial/Tutorial 1 Device Seletion\0" 

我試圖在Linux上使用 以下函數加載我.so文件,但他們都失敗。什麼是正確的路徑來描述我的.so文件的路徑?

m_hSO = ::dlopen("..//..//..//..//..//so//myso.so", RTLD_LAZY); 
    if(!m_hSO) { 
    m_hSO = ::dlopen("..//..//..//..//..//so/myso.so", RTLD_LAZY); 
    } 
    if(!m_hSO) { 
    m_hSO = ::dlopen("../../../../../so/myso.so", RTLD_LAZY); 
    } 
    if(!m_hSO) { 
    m_hSO = ::dlopen("..//..//so/myso.so", RTLD_LAZY); 
    } 
+1

時'dlopen'失敗始終 - 至少使用debugging-'dlerror':'fprintf中(錯誤 「的dlopen失敗%S \ n」 個,dlerror獲得());' –

回答

3
  1. 考慮使用路徑分隔 「/」 而不是 「//」。我不相信使用「//」會產生任何不好的結果,但「/」應該足夠了。

  2. 設置LD_LIBRARY_PATH幷包含共享庫的位置。這是確保dlopen()(或::dlopen())找到您的圖書館的最佳方法。請記住,'相對路徑'是相對於當前工作目錄而言的,這實際上取決於啓動程序時的當前工作目錄以及調用::dlopen()時任何代碼對當前工作目錄的任何更改。

  3. 至於爲什麼當您撥打::dlopen()時,您的程序無法找到.so,您應該撥打電話getcwd()並瞭解它的含義。這將幫助您調整相對路徑。但是,讓我重申,除非你有充分的理由這樣做,否則這是一種不好的做法。

+1

這應該是一個評論,不是回答 –

+0

omg。我只是實現了你所說的getcwd(),它說:buff = \「/ home/online0227/project/Tutorial/Tutorial 1 Device Seletion \\ 000 \\\」\\ 275 \\ 357 \\ 377 \\ 377噸:\\ 336 \\ 367 \\ 377 \\ 177 \\ 000 \\ 000 \\ 001 \\ 000 \\ 000 \\ 000 \\ 000 \\ 000 \\ 000 \\ 00367 \\ 377 \\ 177 \\ 000 \\ 000 \\ 360 \\ 347 \\ 377 \\ 177 \\ 000 \\ 000 \\˚F\\ 217 \\ 000 \\ 360 \\ 000 \\一個\\ 000 \\ 000 \\ 000 \\ 000 \\ 000 \\ 00 \\ ... –

+0

在這種情況下,我應該怎麼做哈哈 –