dllimport和export写一个动态库,并在另一个源文件中使用该库
时间: 2024-03-03 09:47:05 浏览: 116
dll动态库教程
4星 · 用户满意度95%
好的,下面是一个简单的实现,使用 `dllimport` 和 `dllexport` 关键字来定义动态库的导入和导出:
动态库(mylib.h 和 mylib.cpp):
```cpp
#ifndef MYLIB_H
#define MYLIB_H
#ifdef _WIN32
#define DLL_EXPORT __declspec(dllexport)
#define DLL_IMPORT __declspec(dllimport)
#else
#define DLL_EXPORT __attribute__((visibility("default")))
#define DLL_IMPORT
#endif
#ifdef MYLIB_EXPORTS
#define MYLIB_API DLL_EXPORT
#else
#define MYLIB_API DLL_IMPORT
#endif
MYLIB_API void say_hello();
#endif
```
```cpp
#include "mylib.h"
#include <iostream>
void say_hello() {
std::cout << "Hello, World!" << std::endl;
}
```
使用动态库的源文件(main.cpp):
```cpp
#include "mylib.h"
int main() {
say_hello();
return 0;
}
```
在 Windows 系统中,需要将动态库编译成 DLL 文件,同时需要在编译时添加 `/DMYLIB_EXPORTS` 宏定义以导出函数。在 Linux 系统中,需要将动态库编译成 .so 文件,并使用 `-fvisibility=hidden` 参数隐藏未导出的符号。
Windows 编译命令:
```bash
cl /c /EHsc /DMYLIB_EXPORTS mylib.cpp
link /DLL /OUT:mylib.dll mylib.obj
```
Linux 编译命令:
```bash
g++ -c -fPIC -fvisibility=hidden mylib.cpp
g++ -shared -o libmylib.so mylib.o
```
然后编译使用动态库的源文件即可:
```bash
g++ -o main main.cpp -L. -lmylib
```
最后运行可执行文件即可看到输出信息:
```bash
./main
> Hello, World!
```
阅读全文