似乎我不能使用 Cgo 调用在另一个目录而不是当前 Go 包中声明的 C 函数。
所有文件的代码:
// TestGoCallOC.go
package 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 函数,这两个 C 函数可以被调用。
但是,如果我将 C 文件(实际上它们是 Objective-C 文件)放在另一个目录中:
|--src
|--TestGoCallOC
|--TestGoCallOC.go
|--SomeOCCodes
|--test.h
|--test.m
,将前导中的文件路径改成#include "test.h"绝对路径,运行Go main函数,这两个C函数调用不了。
错误信息是
架构 x86_64 的未定义符号:“_fortytwo”,引用自:TestGoCallOC.cgo2.o 中的 __cgo_b3674ecbf56b_Cfunc_fortytwo(也许您的意思是:__cgo_b3674ecbf56b_Cfunc_fortytwo)ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)退出状态 2
我做错什么了吗?还是Cgo没有能力做到这一点?
子衿沉夜
相关分类