用C++编写一个含有加载库文件、加法和减法接口的头文件
时间: 2024-02-16 17:04:24 浏览: 58
可以参考下面的示例代码,其中`add`和`sub`函数为加法和减法接口,`loadLib`函数为加载库文件接口:
```c++
#ifndef MYLIB_H
#define MYLIB_H
// 加载库文件
void loadLib(const char* libPath);
// 加法接口
int add(int a, int b);
// 减法接口
int sub(int a, int b);
#endif
```
在C++源文件中,需要使用`dlopen`和`dlsym`函数来加载库文件和获取其中的函数指针,示例代码如下:
```c++
#include <iostream>
#include <dlfcn.h>
#include "mylib.h"
// 函数指针类型
typedef int (*addFunc)(int, int);
typedef int (*subFunc)(int, int);
// 加载库文件
void loadLib(const char* libPath)
{
void* handle = dlopen(libPath, RTLD_LAZY);
if (!handle) {
std::cerr << "Error: " << dlerror() << std::endl;
return;
}
}
// 加法接口
int add(int a, int b)
{
// 获取函数指针
addFunc addFuncPtr = (addFunc)dlsym(RTLD_DEFAULT, "add");
if (!addFuncPtr) {
std::cerr << "Error: " << dlerror() << std::endl;
return 0;
}
// 调用函数
return addFuncPtr(a, b);
}
// 减法接口
int sub(int a, int b)
{
// 获取函数指针
subFunc subFuncPtr = (subFunc)dlsym(RTLD_DEFAULT, "sub");
if (!subFuncPtr) {
std::cerr << "Error: " << dlerror() << std::endl;
return 0;
}
// 调用函数
return subFuncPtr(a, b);
}
```
需要注意的是,上述代码中的`"add"`和`"sub"`为库文件中对应函数的名称,需要根据实际情况进行修改。另外,需要在编译时链接`dl`库,可以使用以下命令进行编译:
```
g++ -o main main.cpp -ldl
```
阅读全文