C++ 生成静态库 无需 导出头
C++ 生成动态库 需要导出头,这样引用动态库时才能找到对应的方法,否则找不到该接口
1)MSVC编译器提供了一系列C/C++的扩展来指定符号的导入导出,即__declspec属性关键字。
__declspec(dllexport) 表示该符号是从本DLL导出的符号
__declspec(dllimport) 表示该符号是从别的DLL中导入的
1.类的导出方式,在生成目录下选择 生成动态库,同时在预处理里面加上 FORWARD_EXPORTS 的宏定义。(定义类时在类的前面加 FORWARD_DLL 关键字)
//类的动态导出方式
#pragma once
#ifdef FORWARD_EXPORTS
#define FORWARD_DLL __declspec(dllexport)
#else
#define FORWARD_DLL __declspec(dllimport)
#endif
#include <opencv2\opencv.hpp>
#include <string>
#include <unordered_map>
#include <vector>
namespace caffe {
struct DataBlob {
const float* data;
std::vector<int> size;
std::string name;
};
class FORWARD_DLL FORWARD{
public:
FORWARD();
int AddNet(std::string prototxt_path, std::string weights_path, int gpu_id = 0);
std::unordered_map<std::string, DataBlob> Forward(int net_id);
...
~FORWARD();
};
}
2.命名空间内函数的导出方式于此相似,只是在所有的函数前加 FORWARD_DLL 关键字。