我希望能够在Go代码中使用CoolProp c ++库。不幸的是,目前没有用于Go(CoolProp Wrappers)的包装程序,因此我试图自己使用SWIG生成它。
首先,我从coolpop
存储库中获取源文件。主头文件是coolprop/include/CoolProp.h
git clone git@github.com:CoolProp/CoolProp.git coolprop
基本上头文件看起来像:
#ifndef CoolProp_H
#define CoolProp_H
#include <string>
#include <vector>
#include "DataStructures.h"
namespace CoolProp {
double Props1SI(std::string FluidName, std::string Output);
/* many others functions in the real file */
} /* namespace CoolProp */
#endif
下面是我受zacg repository启发编写的界面文件。
gocoolprop.i
%module gocoolprop
%include <typemaps.i>
%include "std_string.i"
%include "std_vector.i"
// This will create 2 wrapped types in Go called
// "StringVector" and "ByteVector" for their respective
// types.
namespace std {
%template(StringVector) vector<string>;
%template(ByteVector) vector<char>;
}
%include "coolprop/include/CoolProp.h"
我正在使用以下命令生成 gocoolprop.go 和 gocoolprop_wrap.cxx :
swig -go -cgo -c++ -intgosize 64 gocoolprop.i
swig命令运行良好,并且文件生成无任何错误。导入go程序包时,我的IDE甚至可以识别所有功能。
但是,当我尝试构建软件包时,我得到了很多类似于以下内容的错误:
# gocoolprop
gocoolprop_wrap.cxx: In function 'double _wrap_Props1SI_gocoolprop_f0fd25a1f15e9efe(_gostring_, _gostring_)':
gocoolprop_wrap.cxx:632:20: error: 'CoolProp' has not been declared
result = (double)CoolProp::Props1SI(arg1,arg2);
“ CoolProp”是CoolProp.h头文件中的命名空间。我想可能需要为此在gocoolprop.i文件中添加一些内容。我查看了c++ part of the swig documentation的内部内容,但没有发现有关命名空间的任何特殊信息。
任何建议都会非常有帮助,这是我第一次使用swig。
我正在使用通过i686-w64-mingw32-g ++ [i686-w64-mingw32]编译的Go 1.11版Windows / amd64和SWIG 3.0.12版。