用于Golang的SWIG Coolprop包装纸

时间:2019-02-22 17:08:58

标签: c++ go swig cgo

我希望能够在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版。

0 个答案:

没有答案