在 Linux 上,使用 C++ 实现动态链接库(DLL)通常是通过创建共享对象(Shared Object,简称 SO 文件)来实现的。以下是创建和使用共享对象的基本步骤:
// mylib.h
#ifndef MYLIB_H
#define MYLIB_H
#ifdef __cplusplus
extern "C" {
#endif
void my_function();
#ifdef __cplusplus
}
#endif
#endif // MYLIB_H
// mylib.cpp
#include <iostream>
#include "mylib.h"
void my_function() {
std::cout << "Hello from my_function!" << std::endl;
}
-fPIC
选项编译源文件,生成位置无关代码。g++ -fPIC -c mylib.cpp -o mylib.o
g++
将编译好的目标文件链接为共享对象。g++ -shared -o libmylib.so mylib.o
现在,你已经成功创建了一个名为 libmylib.so
的共享对象。接下来,你可以在其他程序中使用这个库。
dlopen()
和 dlsym()
函数动态加载和调用共享对象中的函数。// main.cpp
#include <iostream>
#include <dlfcn.h>
#include "mylib.h"
int main() {
void* handle = dlopen("./libmylib.so", RTLD_LAZY);
if (!handle) {
std::cerr << "Error: " << dlerror() << std::endl;
return 1;
}
typedef void (*my_function_t)();
my_function_t my_function = (my_function_t)dlsym(handle, "my_function");
if (!my_function) {
std::cerr << "Error: " << dlerror() << std::endl;
dlclose(handle);
return 1;
}
my_function();
dlclose(handle);
return 0;
}
g++
编译主程序,并链接到共享对象。g++ main.cpp -ldl -o main
./main
这将输出:
Hello from my_function!
这就是在 Linux 上使用 C++ 实现动态链接库的基本过程。注意,这里的示例代码仅供参考,实际使用时可能需要根据具体需求进行调整。