我创建了简单的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;
}

编译:
myname@ubuntu:~/workspace/LinuxGcc/src$ g++ LinuxGcc.cpp

并得到编译错误:
/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
dlfcn.h存在于/usr/include/

问题在哪里?

最佳答案

dlopen(3):



所以

g++ LinuxGcc.cpp -ldl

会好的。

07-24 21:20