2017-12-19 14 views
0

- 私は現在、このIFDEFとヘッダが含まれているC APIのために行くのラッパーを書く:それは、サードパーティのコードなので条件付きインライン関数でヘッダファイルにCGOを使用するには?

#ifdef __cplusplus 
#define TEST_INLINE inline 
#else 
#define TEST_INLINE 
#endif 

TEST_INLINE int callC_inline(){ 
    return 1; 
} 

残念ながら、私は、ヘッダーを変更することはできません。 -Wl、 - allow-multiple-definitionをリンカに渡すと、コードはうまくコンパイルされますが、それは悪い習慣だと思います。だから、私はCGOやトリックを渡すことができるフラグがあれば、興味があります#ifdef __cplusplus状態?

コンパイル例外:

C:\Temp\go-build318595762\cgo_issue\_obj\lib.o: In function `callC_inline': 
./lib.h:11: multiple definition of `callC_inline' 
C:\Temp\go-build318595762\cgo_issue\_obj\main.cgo2.o:D:/work/go/cgo_issue/lib.h:11: first defined here 
collect2.exe: error: ld returned 1 exit status 

main.go:

package main 

//#cgo CFLAGS: -std=gnu99 
//#include "lib.h" 
import "C" 
import "fmt" 

func main() { 
    fmt.Printf("Go call\n") 
    C.callC() 
} 

lib.h:

void callC(); 

#ifdef __cplusplus 
#define TEST_INLINE inline 
#else 
#define TEST_INLINE 
#endif 

TEST_INLINE int callC_inline(){ 
    return 1; 
} 

lib.c:

#include "lib.h" 
#include <stdio.h> 

void callC(){ 
    printf("C call\n"); 
} 
+2

では、ライン '// #cgo CFLAGSに沿って何かをしようとしましたか?あなたのコメントのために – tgregory

+0

@ tregregoryありがとう!それはまさに私が必要なものです!答えとして投稿できますか? –

答えて

1

特別なコメントを使ってcgoに追加情報を渡すことは可能です。 -D__cplusplus`:この場合// #cgo CFLAGS: -D__cplusplus

詳細情報here

関連する問題