URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3154
[ Назад ]

Исходное сообщение
"dlopen + dlsym = Undefined symbol 'my_func'"

Отправлено fura13 , 12-Июл-04 15:55 
    Здраствуйте.
Использую пример из man dlopen (на opennet.ru). Есть бибилиотека, у казываю к ней полный путь. dlopen открывает возвращает не NULL handler. dlsym "говорит" Undefined symbol "my_func". Еще не все, компилю с опцией -rdynamic, но без -ldl. Простой пример(все из того же мана) без -ldl работает. При компиляции с -ldl компилятор (g++ (GCC) 3.2.2 [FreeBSD] 20030205 (release)) "выдает" : g++ -c client.cpp -ggdb -I/usr/local/include -I/usr/local/firebird/include -rdynamic -I include/
g++ -o client -L ./lib -lclient_poligon_mon ClientSocket.o Socket.o client.o -ggdb -L/usr/local/lib -lnetsnmp -lnetclass -lcrypto -lcrypt -L/usr/local/firebird/lib -lgds -ldl -lc_r -ggdb -I/usr/local/include -I/usr/local/firebird/include -rdynamic -I include/
/usr/bin/ld: cannot find -ldl
gmake: *** [client] Ошибка 1
   Все что могу сказать + еще что в библиотеке есть точно my_func ( в mc при F3 видно ), да и я ее сам собирал, уверен что есть. Библиотеку пробовал strip'ать : результат тот же самый.
   Подскажите пожалуйста в чем моя проблема, и где "копать".
   Заранее большое спасибо.

Содержание

Сообщения в этом обсуждении
"dlopen + dlsym = Undefined symbol 'my_func'"
Отправлено fura13 , 13-Июл-04 11:31 
   Грабли отыскались :) . Ф-ция my_func написана на С++ , а так как C++ добавляет к имени функции дополнительные символы поэтому dlsym ее не находит. Решается extern "C".