将符号(函数)地址分配给函数指针 Boost dll 模块。
Assign symbol (function) address to function pointer Boost dll module.
我正在尝试使用 boost dll/shared_library 模块从共享库中获取函数地址,并将它们分配给函数指针以在我的程序中使用,但加载的函数地址不正确,并在使用时导致分段错误在程序中。共享库包含正确的符号地址,因为我可以直接使用 dlsym()
正确加载和使用符号。下面是我使用的代码:
#include <iostream>
#include <boost/dll/shared_library.hpp>
namespace dll = boost::dll;
int (*add)(int a, int b);
int main ()
{
try
{
dll::shared_library lib ("utils.so");
add = lib.get <typeof(add)> ("add");
}
catch (...)
{
std::cout << "Failed to load library" << std::endl;
}
return 0;
}
有人可以建议我在这里缺少什么以及使用 BOOST 从共享库加载 API 函数的正确方法。谢谢
在shared_library::get<T>
中,T
应该是函数类型,而不是指向函数的指针。
add = lib.get <int (int a, int b)>("add");
我正在尝试使用 boost dll/shared_library 模块从共享库中获取函数地址,并将它们分配给函数指针以在我的程序中使用,但加载的函数地址不正确,并在使用时导致分段错误在程序中。共享库包含正确的符号地址,因为我可以直接使用 dlsym()
正确加载和使用符号。下面是我使用的代码:
#include <iostream>
#include <boost/dll/shared_library.hpp>
namespace dll = boost::dll;
int (*add)(int a, int b);
int main ()
{
try
{
dll::shared_library lib ("utils.so");
add = lib.get <typeof(add)> ("add");
}
catch (...)
{
std::cout << "Failed to load library" << std::endl;
}
return 0;
}
有人可以建议我在这里缺少什么以及使用 BOOST 从共享库加载 API 函数的正确方法。谢谢
在shared_library::get<T>
中,T
应该是函数类型,而不是指向函数的指针。
add = lib.get <int (int a, int b)>("add");