미안 현재이 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");
}
당신이 라인'// #cgo CFLAGS을 따라 뭔가 시도해 봤어 정보 : -D__cplusplus'를? 귀하의 의견에 대한 – tgregory
@ tregregory 감사합니다! 그게 내가 원하는거야! 답변으로 게시 할 수 있습니까? –