2017-12-19 26 views
0

미안 현재이 IFDEF와 헤더를 포함 C API를위한 이동 래퍼를 작성. -Wl, allow-multiple-definition을 링커에 전달하면 코드가 제대로 컴파일되지만 나쁜 생각입니다. 그래서, CGO에 전달할 수있는 어떤 깃발이나 만족할만한 것이 있는지 궁금합니다. #ifdef __cplusplus 상태?조건부 인라인 함수로 헤더 파일에 CGO를 사용하는 방법은 무엇입니까? 그것은 제 3 자 코드이기 때문에</p> <pre><code>#ifdef __cplusplus #define TEST_INLINE inline #else #define TEST_INLINE #endif TEST_INLINE int callC_inline(){ return 1; } </code></pre> <p>불행하게도, 내가 헤더를 변경할 수 없습니다 :

편집 예외 :

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을 따라 뭔가 시도해 봤어 정보 : -D__cplusplus'를? 귀하의 의견에 대한 – tgregory

+0

@ tregregory 감사합니다! 그게 내가 원하는거야! 답변으로 게시 할 수 있습니까? –

답변

1

특별한 의견을 통해 cgo에 몇 가지 추가 정보를 전달할 수 있습니다. 이 경우 // #cgo CFLAGS: -D__cplusplus

here