У меня проблема с общей библиотекой (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'
Как показано перед символом есть! Любая идея, почему это не удается?
Простите, нет, это не имеет значения. Кроме того, использование ++ (так как это файл .cpp) не решает этого ... – Elmi
Ну ладно;) Ну, вы должны использовать g ++. Проблема Tge заключается в том, что C++ использует другое имя для этой функции. Вы должны объявить его с помощью extern «C», чтобы компоновщик использовал имя C для этой функции. – MatzZze
В заголовочном файле он уже объявлен как extern «C»: -/ – Elmi