2015-09-18 5 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 1 Как и SHARED LIB 2 связаны с /usr/lib.

Кажется, что я пропускаю несколько флагов.

Как я могу решить эту проблему?

+1

Ваша вторая разделяемая библиотека должна загрузить статическую библиотеку как разделяемую библиотеку, или быть скомпилирован с ним в качестве статической библиотеки. Это приводит к тому, что он становится статичным. – Davislor

+0

Вы должны объявить символы 'extern 'C'' (или вам нужно использовать их искаженные имена). Вы это делаете? – Galik

ответ

0

какие флаги используются для создания «ОБЩЕЙ ЛИБЫ 1»? AFAIK -fvisibility не влияет на статические библиотеки.

Однако, если вы используете связь --exclude-libs, символ «Статический Lib 1» будет удален.

Надежда этот вопрос может помочь: How to apply gcc -fvisibility option to symbols in static libraries?

+0

не имеют ни -exclude-libs, ни -fvisibility в любом проекте. –

+0

@MertMertce, тогда вы должны проверить предложение Галика. кроме того, любой символ с префиксом «статический» вообще не будет иметь внешних связей. – crazii

Смежные вопросы