对 DLOPEN 的未定义引用



我有一个C程序,我想加载到正在运行的C程序中。以下是片段

文件 : 交流

#include <stdio.h>
void abc() { 
printf("This is abcn"); 
}

文件: 主文件.cpp

#include<stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *lib = dlopen("./a.so", RTLD_LAZY);
if (!lib) {
printf("dlopen failed: %sn", dlerror());
return 1;
}
void (*f)() = dlsym(lib, "abc");
if (f) {
f();
} else {
printf("dlsym for f1 failed: %sn", dlerror());
}
dlclose(lib);
return 0;
}

我正在使用以下命令进行编译

gcc -fpic -g -shared -ldl -o a.so a.c
g++ -w mainFile.cpp -o mainFile

输出:

/tmp/cc9fYZaf.o: In function `main':
mainFile.cpp:(.text+0x1a): undefined reference to `dlopen'
collect2: error: ld returned 1 exit status

我正在用 gcc 版本 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12( 5.4.0 在 Ubuntu 16.04 中编译 20160609

请帮忙

注意:我遵循了以下参考资料,但没有帮助。

  1. 你能动态编译和链接/加载 C 代码到 C 程序中吗?
  2. 自 Ubuntu 升级以来对"DLOPEN"的未定义引用
  3. 对"DLOPEN"的未定义引用

第二行 - 链接可执行文件的那行 - 需要-ldl,而不是第一行:

g++ -w mainFile.cpp -ldl -o mainFile

最新更新