2011-07-15 44 views
6

我有先加載一幅名爲.dylib讓我們稱之爲libFirst.dylib使用以下命令軟件:上dlopen()的錯誤沒有找到圖片

void* handle = dlopen(path.c_str(), RTLD_LAZY | RTLD_GLOBAL); 

後來從加載libFirst.dylib功能我試圖內使用相同的命令加載另一個名爲.dylib但libSecond.dylib,這個共享庫的加載讓我在我的Xcode控制檯以下警告:

error warning: Ignored unknown object module at 0x129310 with type 0x8a8399 

dlerror: dlopen(/path/libSecond.dylib, 9): Library not loaded: libFirst.dylib 
    Referenced from: /path/libSecond.dylib 
    Reason: image not found 

我不明白的是,它說libFirst.dylib沒有加載,但我目前正在從libFirst.dylib函數,所以這怎麼可能?

DYLD_LIBRARY_PATH中的所有路徑都顯示正確。

在此先感謝,我一直堅持這幾天。

+0

你試過類似strace的東西嗎?它可能會提供更多信息,以明確哪些呼叫失敗。 – Josh

+0

我的堆棧跟蹤顯示了在libFirst.dylib中的函數libSecond.dylib上調用dlopen的函數CreateModule。 –

+0

不是堆棧跟蹤 - strace代表系統跟蹤。它是跟蹤函數調用,比如打開文件,統計inode等等。它可能會說明操作系統正在查找的位置。 – Josh

回答

3

我最終使用-install_name將所有庫的安裝名更改爲@ rpath/dylibName.dylib,然後在Xcode中使用@loader_path設置運行路徑搜索路徑以查找我正在使用的所有.dylib。

+0

你可以給你的整個命令行使用* -install_name *? –

+1

Hi @MartinDelille。 3年前我做了這個,所以我沒有確切的命令行,但是這裏有一個關於如何使用它的博客:http://log.zyxar.com/blog/2012/03/10/install-name -on-OS-X / –

相關問題