似乎我不能使用 Cgo 調(diào)用在另一個目錄而不是當(dāng)前 Go 包中聲明的 C 函數(shù)。所有文件的代碼:// TestGoCallOC.gopackage main/*#include "test.h"#cgo CFLAGS: -x objective-c#cgo LDFLAGS: -framework Foundation*/import "C"import ( "fmt")func main() { fmt.Println(C.fortytwo())}// test.h#include <stdio.h>#include <stdlib.h>int fortytwo();// test.m#include "test.h"int fortytwo() { return 42;}如果我將所有文件放在一個目錄中:|--src |--TestGoCallOC |--TestGoCallOC.go |--test.h |--test.m并運行 Go main 函數(shù),這兩個 C 函數(shù)可以被調(diào)用。但是,如果我將 C 文件(實際上它們是 Objective-C 文件)放在另一個目錄中:|--src |--TestGoCallOC |--TestGoCallOC.go |--SomeOCCodes |--test.h |--test.m,將前導(dǎo)中的文件路徑改成#include "test.h"絕對路徑,運行Go main函數(shù),這兩個C函數(shù)調(diào)用不了。錯誤信息是架構(gòu) x86_64 的未定義符號:“_fortytwo”,引用自:TestGoCallOC.cgo2.o 中的 __cgo_b3674ecbf56b_Cfunc_fortytwo(也許您的意思是:__cgo_b3674ecbf56b_Cfunc_fortytwo)ld:未找到架構(gòu) x86_64 的符號 clang:錯誤:鏈接器命令失敗,退出代碼 1(使用 -v 查看調(diào)用)退出狀態(tài) 2我做錯什么了嗎?還是Cgo沒有能力做到這一點?
Cgo 可以調(diào)用在另一個目錄中聲明的 C 函數(shù)嗎?
幕布斯7119047
2022-01-17 18:38:40