2015-09-18 57 views
0

我有一個使用共享庫的可執行項目,其中包含一個靜態庫。然後從可執行文件中,我嘗試使用dlopen加載另一個共享庫。該庫已找到,但無法從靜態庫中找到符號。linux dlopen無法找到靜態庫的符號

下面是結構:

-- SHARED LIB 1 
    -- (compiled with) Static Lib 1 

-- EXECUTABLE 
    -- SHARED LIB 1 
    -- dlopen SHARED LIB 2 XX ERROR: SHARED LIB 2 cannot find symbols of Static Lib 1 

兩個SHARED LIB 1SHARED LIB 2/usr/lib相連。

看來我錯過了一些標誌。

我該如何解決這個問題?

+1

你的第二個共享庫需要加載你的靜態庫共享庫,或作爲靜態庫與它編譯。這會使靜態的好處變得不利。 – Davislor

+0

你必須聲明符號'extern「C」'(或者你必須使用它們的重名)。你在做那個嗎? – Galik

回答

0

什麼標誌用於構建「共享LIB 1」? AFAIK -fvisibility不會影響靜態庫。

但是,如果在鏈接上使用--exclude-libs,則「Static Lib 1」符號將被刪除。

希望這個問題可以幫助:How to apply gcc -fvisibility option to symbols in static libraries?

+0

在任何項目中都沒有--exclude-libs和-fvisibility。 –

+0

@MertMertce那麼你應該檢查Galik的建議。此外,任何帶有「靜態」前綴的符號都不會有外部鏈接。 – crazii

相關問題