Я бы хотел использовать библиотеку CoolProp c ++ внутри моего кода Go.К сожалению, в настоящее время нет оболочки для 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 работает хорошо, и файлы создаются без ошибок.Моя IDE даже способна распознать все функции, когда я импортирую пакет go.
Однако, когда я пытаюсь собрать пакет, я получаю много ошибок, похожих на:
# 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 ++ документации swig , но я не нашел ничего особенного в пространствах имен.
Любой совет был бы очень полезен, я впервые использую swig.
Я использую Go версии 1.11 для windows / amd64 и SWIG версии 3.0.12, скомпилированную с i686-w64-mingw32-g ++ [i686-w64-mingw32].