Скорей всего Вы используете C++ (если C, то расширения исходных файлов стоят .cc или .cpp и иcпользуется компилятор C++ по умолчанию для этих файлов). Проблема заключена в следующем: в C++ используется жесткая типизация, поэтому к именам функций внутри объектных файлов добавляются символы, которые отвечают за типы передаваемых параметров в эту функцию. Например, функция f(int) будет выглядеть как f__Fi(int), или f(int, void*) будет выглядеть как f__FiFPv(int, void*). Решений этой проблемы три:
1) Использовать в dlsym функции с именами, включающие в себя типы параметров, подобно test__FUl.
2) Если у Вас все-таки находится C код в файлах с расширениями C++ то следует переименовать расширения этих файлов в .c.
3) Использовать возможности extern с заданием типа языка:
extern "C" { int func1() { ... } int func2() { ... } } |