Я использую утилиту общей библиотеки, которая ищет символы из общей библиотеки (на платформах, отличных от Windows, с помощью GetProcAddress
). Это работает для обычных функций. Однако мне нужна функция, которая представляет собой экземпляр шаблона в пространстве имен. Я подтвердил с помощью nm -gDC lib.so
, что библиотека содержит символ, и написал его точно так же при попытке поиска, но его не удалось найти.nm -gDC lib.so
...
0000000000009575 T rosidl_service_type_support_t const* rosidl_typesupport_cpp::get_service_type_support_handle<example_interfaces::srv::AddTwoInts>()
...
Я попытался найти:
GetProcAddress((HINSTANCE)(lib), "rosidl_typesupport_cpp::get_service_type_support_handle<example_interfaces::srv::AddTwoInts>");
но он возвращает nullptr
.
Есть ли какая-то специальная обработка для экземпляров шаблона, которую я не смог найти?
Я нашел другой метод, который возвращает мне то, что мне нужно, но мне все равно будет интересно любые ресурсы о том, почему это не сработало!
-C
. Вы хотите искаженное имя, это имя ожидаетGetProcAddress
. - person Igor Tandetnik   schedule 29.05.2021lib.so
определенно не будет работать на Windows, Mac или телефоне Android. И да, схемы изменения имен часто зависят от компилятора; если вы хотите, чтобы несколько переносимых имен экспортировались из вашей библиотеки, придерживайтесь простых функций C. - person Igor Tandetnik   schedule 29.05.2021