使用swig工具為go語言產生調用C、C++代碼例子

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

swig開源項目(http://www.swig.org)為多種程式設計語言提供了相互訪問的介面產生工具,這裡面也包含了為go語言產生調用C、C++代碼的功能。Go語言內建的cgo工具已經支援對C代碼的調用,但對C++代碼的支援確實不行,所以Go1已經把swig的C++這部分功能作為附帶功能加入(參見Go原始碼\go\misc\swig)。這樣,C++這塊的資源也可以被Go語言使用了。


1、為Go語言產生調用C語言的介面:

根據swig的相關文檔指導( http://www.swig.org/Doc2.0/Go.html#Go ),用swig內建的例子做測試。以下的例子都是在ubuntu12.04下測試完成的。例子來源\swigwin-2.0.7\Examples\go\simple

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 
這裡會報錯,

example_gc.c:14 8c: No such file or directory: runtime.h 

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.7\Examples\go\class

swig -c++ -go example.i

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++本地代碼,確實能滿足效能要求比較高的需求。但要記住,它是一把雙刃劍。它會讓你的解決方案更加複雜,需要花費更多的時間和精力去開發和維護。要不要使用它,只能靠你自己去衡量。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.