修复dlopen和dlcose的未定义引用

vic*_*ico 2 c++ linux g++ dlopen

我创建了简单的c ++应用程序.我可以编译它并且工作正常.但现在我需要动态加载库,我已经将dlfnc.h添加到我的项目中并添加了一些代码:

#include <iostream>
#include <dlfcn.h>
void *mylib;
int eret;

using namespace std;

int main() {

    mylib = dlopen("mylib.so", RTLD_LOCAL | RTLD_LAZY);
    eret = dlclose(mylib);

    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

myname@ubuntu:~/workspace/LinuxGcc/src$ g++ LinuxGcc.cpp 
Run Code Online (Sandbox Code Playgroud)

并得到编译错误:

/tmp/ccxTLiGY.o: In function `main':
LinuxGcc.cpp:(.text+0xf): undefined reference to `dlopen'
LinuxGcc.cpp:(.text+0x25): undefined reference to `dlclose'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

dlfcn.h 存在于 /usr/include/

哪里有问题?

小智 10

的dlopen(3):

   Link with -ldl.
Run Code Online (Sandbox Code Playgroud)

所以

g++ LinuxGcc.cpp -ldl
Run Code Online (Sandbox Code Playgroud)

会好的.


pet*_*ohn 5

解决方法很简单。添加-ldl用于链接的标志。