共享库符号查找模板实例化
Shared library symbol lookup template instantiation
我正在使用共享库实用程序从共享库中查找符号(在非 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>");
但它 returns 一个 nullptr
.
是否有一些我找不到的对模板实例化的特殊处理?
我找到了一种不同的方法 returns 我需要什么,但我仍然对任何资源感兴趣,为什么它不起作用!
I have confirmed using nm -gDC lib.so that the library contains the symbol and spelled it exactly the same in my lookup attempt but it can't be found.
正如 Igor Tandetnik 正确评论的那样,库 实际上 导出的名称是 C++
mangled 名称,并且 not rosidl_typesupport_cpp::get_service_type_support_handle<example_interfaces::srv::AddTwoInts>
(这是 demangled 名称)。
要查看 实际 符号名称,请使用 nm -D lib.so
(特别是,省略 -C
标志)。
我正在使用共享库实用程序从共享库中查找符号(在非 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>");
但它 returns 一个 nullptr
.
是否有一些我找不到的对模板实例化的特殊处理?
我找到了一种不同的方法 returns 我需要什么,但我仍然对任何资源感兴趣,为什么它不起作用!
I have confirmed using nm -gDC lib.so that the library contains the symbol and spelled it exactly the same in my lookup attempt but it can't be found.
正如 Igor Tandetnik 正确评论的那样,库 实际上 导出的名称是 C++
mangled 名称,并且 not rosidl_typesupport_cpp::get_service_type_support_handle<example_interfaces::srv::AddTwoInts>
(这是 demangled 名称)。
要查看 实际 符号名称,请使用 nm -D lib.so
(特别是,省略 -C
标志)。