加载.so库C ++

时间:2013-05-02 10:25:27

标签: c++ shared-libraries

我正在尝试加载库library.so,当我尝试if存在时返回true,但是当我使用dlopen返回库时不存在。

std::ifstream ifile("library.so"); if (ifile) {
    cout << "Exist!" << std::endl; }

cout << "C++ dlopen demo\n\n";

// open the library cout << "Opening hello.so...\n"; void* handle = dlopen("library.so", RTLD_LAZY);

if (!handle) {
    cerr << "Cannot open library: " << dlerror() << '\n';
    return 1; }

1 个答案:

答案 0 :(得分:2)

dlopen在其可以搜索的路径中受到严格限制(保持简短:默认路径加上LD_LIBRARY_PATH变量 - 有关完整列表,请参阅完整的documentation。您的ifstream查看当前目录(无论它是什么),默认情况下,dlopen考虑的路径中很可能不会包含这些内容。

解决方案包括:

  • 相应地设置LD_LIBRARY_PATH(这通常是首选方法)。
  • 使用绝对路径而不是相对路径。
  • 将您的库置于其中一个默认路径中(例如/lib/usr/lib)。