QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 10:19
Меню

Проект OpenNET - все о Unix
FAQ
Функция dlsym не находит точки входа функций в моей библиотеке. Print E-mail

Скорей всего Вы используете 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() { ... } }

[Вернуться к списку]
©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source