我有一个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
请帮忙
注意:我遵循了以下参考资料,但没有帮助。
- 你能动态编译和链接/加载 C 代码到 C 程序中吗?
- 自 Ubuntu 升级以来对"DLOPEN"的未定义引用
- 对"DLOPEN"的未定义引用
第二行 - 链接可执行文件的那行 - 需要-ldl
,而不是第一行:
g++ -w mainFile.cpp -ldl -o mainFile