1

我正在尝试加载库 library.so,当我尝试是否存在时返回 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; }
4

1 回答 1

2

dlopen它可以搜索的路径受到很大限制(为了简短起见:默认路径加LD_LIBRARY_PATH变量 - 请参阅完整文档以获取完整列表)。您ifstream在当前目录中的外观(无论它是什么),默认情况下很可能不包含在所dlopen考虑的路径中。

解决方案包括:

  • 相应地设置 LD_LIBRARY_PATH(这通常是首选方法)。
  • 使用绝对路径而不是相对路径。
  • 将您的库放在默认路径之一(例如/lib/usr/lib)中。
于 2013-05-02T10:33:55.620 回答