1、为Go语言生成调用C语言的接口:
根据swig的相关文档指导( http://www.swig.org/Doc2.0/Go.html#Go ),用swig自带的例子做测试。以下的例子都是在ubuntu12.04下测试完成的。例子来源swigwin-2.0.7Examplesgosimple
swig -go example.i
gcc -c -fpic example.c
gcc -c -fpic example_wrap.c
gcc -shared example.o example_wrap.o -o example.so
go tool 8g example.go
go tool 8c example_gc.c
这里会报错,
After reading golang-nuts thread:
原来是没有设置3个环境变量: GOROOT、 GOARCH和 GOOS。这里临时在控制台设置:
export GOROOT=/usr/lib/go
export GOARCH=386
export GOOS=linux
go tool 8c -I ${GOROOT}/pkg/${GOOS}_${GOARCH} example_gc.c
go tool pack grc example.a example.8 example_gc.8
go tool 8g runme.go
go tool 8l -o runme runme.8
//为了运行runme,还需要export LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${pwd}:${LD_LIBRARY_PATH}
./runme
这样应该能看到运行结果了
2、为go语言生成调用C++语言的接口:
例子来源swigwin-2.0.7Examplesgoclass
swig -c++ -go example.ig++ -g -c -fpic example.cxx example_wrap.cxx
g++ -g -c -fpic example.cxx example_wrap.cxx
g++ -shared example.o example_wrap.o -o example.so
go tool 8g example.go
export GOROOT=/usr/lib/go
export GOARCH=386
export GOOS=linux
go tool 8c -I ${GOROOT}/pkg/${GOOS}_${GOARCH} example_gc.c
go tool pack grc example.a example.8 example_gc.8
go tool 8g runme.go
go tool 8l -o runme runme.8
//为了运行runme,还需要export LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${pwd}:${LD_LIBRARY_PATH}
./runme
最后,泼点冷水。调用C或者C++本地代码,确实能满足性能要求比较高的需求。但要记住,它是一把双刃剑。它会让你的解决方案更加复杂,需要花费更多的时间和精力去开发和维护。要不要使用它,只能靠你自己去衡量。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/88031/viewspace-1058678/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/88031/viewspace-1058678/