GO 1.5 と C++ を SWIG でブリッジさせる方法
を試してみたのですが、私は上手く動かすことができませんでした。
で、こんな風にしてみたら動いたので、記録を残しておきます。
ebata@DESKTOP-P6KREM0 MINGW64 ~/kese/swig
$ tree
.
├── main1.go
└── sc1
├── nop.go
├── sc1.h
└── sc1.swigcxx
1 directory, 4 files
// main1.go
package main
import (
"fmt"
"./sc1"
)
func Dump(p interface{}) {
fmt.Printf("%v:%T\n", p, p)
}
func main() {
Dump(sc1.EchoIntN(8))
Dump(sc1.EchoDoubleN(9))
}
でもって、nop.go
package sc1
sc1.h
#pragma once
inline int
EchoIntN( int p ) {
return p;
}
inline double
EchoDoubleN( double p ) {
return p;
}
sc1.swigcxx
%module sc1
%{
#include "sc1.h"
%}
%include "sc1.h"
ちなみに、sc1.hのインラインをやめて、sc1.hとsc1.cに分けて実施したら、こうなった
$ go build main1.go
# _/C_/Users/ebata/kese/swig2/sc1
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w6
4-mingw32/bin/ld.exe: $WORK\b002\_x004.o:/tmp/go-build/sc1_wrap.cxx:279: undefin
ed reference to `EchoIntN(int)'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w6
4-mingw32/bin/ld.exe: $WORK\b002\_x004.o:/tmp/go-build/sc1_wrap.cxx:292: undefin
ed reference to `EchoDoubleN(double)'
collect2.exe: error: ld returned 1 exit status
ずいぶん悩んだが、もしかしたらと思い、sc1.c → sc1.cpp にリネームしたら、あっさり通った
sc1.hは以下の通り
#pragma once
int EchoIntN(int);
double EchoDoubleN(double);
sc1.cppは以下の通り
//#pragma once
#include "sc1.h"
int EchoIntN( int p ) {
return p;
}
double EchoDoubleN( double p ) {
return p;
}
以上