Упаковка SWIG Coolprop для Голанга - PullRequest
0 голосов
/ 22 февраля 2019

Я бы хотел использовать библиотеку 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].

...