golang新版本對於cgo支援的乙個坑

2021-06-19 03:55:27 字數 3625 閱讀 1295

檔案test.h如下

#ifndef _test_h

#define _test_h

#ifdef __cplusplus

extern "c"

#endif

#endif

檔案test.cc如下

#include "_cgo_export.h"

extern "c"

}

檔案test.go如下

package test

/*#include "test.h"

*/import "c"

import ()

func test()

//export test

func test()

如果執行go build -x則會有如下結果

work=/tmp/go-build845372545

mkdir -p $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/

mkdir -p $work/_/home/pirate/programs/goclipse/workspace/v8/src/

cd /home/pirate/programs/goclipse/workspace/v8/src/test

/home/pirate/programs/go/pkg/tool/linux_amd64/cgo -objdir $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -- -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ test.go

/home/pirate/programs/go/pkg/tool/linux_amd64/6c -f -v -w -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -i /home/pirate/programs/go/pkg/linux_amd64 -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_defun.6 -d goos_linux -d goarch_amd64 $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_defun.c

gcc -i . -g -o2 -fpic -m64 -pthread -print-libgcc-file-name

gcc -i . -g -o2 -fpic -m64 -pthread -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_main.o -c $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_main.c

gcc -i . -g -o2 -fpic -m64 -pthread -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_export.o -c $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_export.c

gcc -i . -g -o2 -fpic -m64 -pthread -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.cgo2.o -c $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.cgo2.c

gcc -i . -g -o2 -fpic -m64 -pthread -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.o -c ./test.c

g++ -i . -g -o2 -fpic -m64 -pthread -i $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/ -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.cc.o -c ./test.cc

g++ -i . -g -o2 -fpic -m64 -pthread -o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_.o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_main.o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/_cgo_export.o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.cgo2.o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.o $work/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.cc.o

# _/home/pirate/programs/goclipse/workspace/v8/src/test

/tmp/go-build845372545/_/home/pirate/programs/goclipse/workspace/v8/src/test/_obj/test.cc.o: in function `mytest':

./test.cc:6: undefined reference to `test()'

collect2: error: ld returned 1 exit status

這裡可以看到是test.cc是用g++來編譯的,但是test函式的宣告是在_cgo_export.c裡,宣告是在_cgo_export.h裡,g++編譯的時候肯定會找不到這個函式,但是只需要乙個小修改就可以解決問題,即把include "_cgo_export.h"移到extern "c"裡去,最終如下

extern "c" 

}

為wampserver 新增新版本php支援

1.1.停止wamp伺服器.3.從已存在的php版本檔案中 如php7.0.4 eg.wamp bin php php7.0.4 複製以下檔案 php.ini phpforapache.ini和wampserver.conf到php7.2.3資料夾.4.開啟php7.1.0資料夾的以下檔案 php....

iOS檢查App新版本並更新新版本

檢查新版本 更新 第一種方法 檢查新版本 更新 dispatch async dispatch get global queue dispatch queue priority default,0 檢查新版本更新 void showalert void alertview uialertview a...

CowNewSQL發布新版本

cownewsql發布新版本了,這個版本的推出標誌著cownewsql能正式應用於開發實際了。本版更新列表 1 增加了對create table drop table create index和dropindex的支援。2 修改了n多bug,使用從各方收集到的近百條各種複雜的sql語句全面測試通過!...