c++代码去掉主函数写成动态库
时间: 2023-09-24 19:09:21 浏览: 54
好的,下面是将一段 C++ 代码编译成动态库的步骤:
1. 编写 C++ 代码,注意不要包含主函数 `int main()`,因为动态库不需要主函数。
```cpp
#include <iostream>
void hello() {
std::cout << "Hello, world!" << std::endl;
}
```
2. 编译代码成动态库,使用下面的命令:
```bash
g++ -shared -fPIC hello.cpp -o libhello.so
```
这里的 `-shared` 选项表示编译成动态库,`-fPIC` 表示生成位置无关代码,`-o` 指定输出文件名。
3. 测试动态库,编写测试代码:
```cpp
#include <dlfcn.h>
int main() {
void *handle = dlopen("./libhello.so", RTLD_LAZY);
if (!handle) {
std::cerr << dlerror() << std::endl;
return 1;
}
typedef void (*hello_t)();
hello_t hello = (hello_t) dlsym(handle, "hello");
if (!hello) {
std::cerr << dlerror() << std::endl;
return 1;
}
hello();
dlclose(handle);
return 0;
}
```
这里使用 `dlopen` 打开动态库,`dlsym` 获取导出函数地址,然后调用导出函数。
4. 编译测试代码,使用下面的命令:
```bash
g++ test.cpp -ldl -o test
```
这里的 `-ldl` 选项表示链接动态链接器。
5. 运行测试程序,使用下面的命令:
```bash
./test
```
如果一切正常,就会输出 `Hello, world!`。
这样就成功将 C++ 代码编译成了动态库,并且测试了动态库的导出函数。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)