2015-04-02 2 views
0

У меня проблема с общей библиотекой (Linux) и программой, которая ссылается на эту библиотеку, но не находит символы - хотя они есть. Вот что у меня есть:Символы, которые не были найдены при ссылке

Общая библиотека "libetest.so", которая находится в/usr/lib. Когда я делаю

readelf -Ws /usr/lib/libetest.so.0 

это дает (кроме некоторых других) этот вывод:

54: 000052c0 905 FUNC LOCAL DEFAULT 11 ETEST_open_connection 

Теперь у меня есть приложение, которое использует ETEST_open_connection(). Когда я построить его с

gcc lib_test.cpp -DENV_LINUX -letest 

он терпит неудачу с ошибкой компоновщика

lib_test.cpp:(.text+0x32): undefined reference to `ETEST_open_connection' 

Как показано перед символом есть! Любая идея, почему это не удается?

ответ

0

Пожалуйста, попробуйте:

gcc -DENV_LINUX -letest lib_test.cpp 

Это должно быть правильный порядок аргументов.

+0

Простите, нет, это не имеет значения. Кроме того, использование ++ (так как это файл .cpp) не решает этого ... – Elmi

+1

Ну ладно;) Ну, вы должны использовать g ++. Проблема Tge заключается в том, что C++ использует другое имя для этой функции. Вы должны объявить его с помощью extern «C», чтобы компоновщик использовал имя C для этой функции. – MatzZze

+0

В заголовочном файле он уже объявлен как extern «C»: -/ – Elmi

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