我创建了简单的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
<{1}} 中存在 dlfcn.h
问题在哪里?
答案 0 :(得分:10)
的dlopen(3):
Link with -ldl.
所以
g++ LinuxGcc.cpp -ldl
没问题。
答案 1 :(得分:4)
解决方案非常简单。添加-ldl
标记以进行链接。
答案 2 :(得分:0)
如果使用bazel构建系统,则linkopts = ['-ldl']