- 應用一個
- 動態庫d
- 靜態庫小號
其中:
- A在編譯時與靜態庫S鏈接。
- D編譯時不鏈接S,但使用其頭文件
- A使用
dlopen
在運行時加載D.
當在A中運行時D有可能使用S中定義的符號,而D在它自己的編譯時沒有與S鏈接?即D可以訪問全局命名空間中的符號嗎?
其他說明: 我需要d和A既能夠從S. 調用函數我非常不想改變S.
我試過這個,我也得到(當從S個碼元在d)中使用:
dyld: lazy symbol binding failed: Symbol not found: __Z14myFunctioni
我相信這可能或者是:
- 現有函數 'myFunction的(int)的' 不是提供給共享庫(安全?)
- 此函數的符號名稱已被名稱以不同的方式(編輯:與
extern "C"
測試並排除)。
也許我需要用不同的設置進行編譯,或者我必須將所有的S鏈接到D?如果S本身變成一個動態圖書館,情況也會改變嗎?
三江源
如果問題出在名稱混搭,請嘗試在myFunction的函數聲明中使用'extern「C''來禁用名稱混編。 – 2012-07-14 21:33:00
謝謝Radek,我現在用你的建議排除了這一點。它必須是符號可訪問性問題。 – 2012-07-15 14:55:59