写一个源文件调用自己写的动态库,打印字符信息的C++程序
时间: 2024-03-03 16:46:56 浏览: 53
好的,下面是一个简单的实现,分别有源文件和动态库的代码:
源文件(main.cpp):
```cpp
#include <iostream>
#include <dlfcn.h> // 动态链接库的头文件
using namespace std;
int main() {
void* handle = dlopen("./libprint.so", RTLD_LAZY); // 打开动态库
if (!handle) {
cerr << "Cannot open library: " << dlerror() << '\n';
return 1;
}
// 获取动态库中的函数指针
typedef void (*print_t)(const char*);
print_t print = (print_t) dlsym(handle, "print");
const char* dlsym_error = dlerror();
if (dlsym_error) {
cerr << "Cannot load symbol 'print': " << dlsym_error << '\n';
dlclose(handle);
return 1;
}
// 调用动态库中的函数
print("Hello, World!");
dlclose(handle); // 关闭动态库
return 0;
}
```
动态库(libprint.cpp):
```cpp
#include <iostream>
using namespace std;
extern "C" void print(const char* message) { // 必须使用 extern "C",以便在 C++ 中进行链接
cout << message << endl;
}
```
将上述两个文件编译成动态库和可执行文件:
```bash
g++ -shared -o libprint.so libprint.cpp # 编译动态库
g++ -o main main.cpp -ldl # 编译可执行文件
```
最后运行可执行文件即可看到输出信息:
```bash
./main
> Hello, World!
```