修复dlopen和dlcose的未定义引用

时间:2015-10-09 10:19:02

标签: 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;
}

编译:

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

问题在哪里?

3 个答案:

答案 0 :(得分:10)

的dlopen(3):

   Link with -ldl.

所以

g++ LinuxGcc.cpp -ldl

没问题。

答案 1 :(得分:4)

解决方案非常简单。添加-ldl标记以进行链接。

答案 2 :(得分:0)

如果使用bazel构建系统,则linkopts = ['-ldl']