将符号(函数)地址分配给函数指针 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");