gpt4 book ai didi

objective-c - cgo godefs 和 Objective-C

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:36 28 4
gpt4 key购买 nike

我通过 C GoLang 的包在 GoLang 上编写了一个包含 Objective-C 代码(调用一些 OSX API)的程序,我需要从 Go 传递类型为 T 的变量代码到 Objective-C 代码,反之亦然。 T 是结构(或其他类型)。所以我需要在 GoLang 中创建兼容的(在内存布局方面)类型/变量,并通过 unsafe.Pointer 转换将其传递给 Objective-C。对于通用 C 代码,我在这种情况下使用 godefs,但我无法将 godefs 用于 Objective-C。如果我尝试 go tool cgo -godefs cgodefs.go

// This is "cgodefs.go" file
package tmp

/*
#cgo CFLAGS: -x objective-c
#cgo LDFLAGS: -framework Cocoa
#import <Cocoa/Cocoa.h>
*/
import "C"

type CGPoint C.CGPoint

我收到大量错误:

In file included from /Users/unsacrificed/go/src/gui/cgodefs.go:10:
In file included from /System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12:
In file included from /System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:8:
/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:503:1: error: expected identifier or '('
@class NSString, Protocol;
^
/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:505:9: error: unknown type name 'NSString'
typedef NSString * NSExceptionName NS_EXTENSIBLE_STRING_ENUM;
^
/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:506:9: error: unknown type name 'NSString'
typedef NSString * NSRunLoopMode NS_EXTENSIBLE_STRING_ENUM;
... (100000+ lines of errors)

有趣的是,我可以通过 C GoLang 的包使用 Objective-C 编译和运行 GoLang 应用程序。

report到 GoLang 但他说

The cgo tool works with C, not Objective-C.

有什么方法可以获得 Objective-C 类型的 GoLang 等效(内存兼容)类型?

最佳答案

终于找到解决办法了。可以做我想做的事。我唯一错过的是:godefs 忽略了 #cgo CFLAGS: -x objective-c 行。解决方案 - 将所需的 CFLAGS 作为参数传递给 go 二进制文件 (-- -x objective-c)。工作示例:

// +build ignore

package tmp

//go:generate go tool cgo -godefs -- -x objective-c cgodefs.go

//#import <Cocoa/Cocoa.h>
import "C"

type CGPoint C.CGPoint

输出:

// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs -- -x objective-c cgodefs.go

package tmp

type CGPoint struct {
X float64
Y float64
}

关于objective-c - cgo godefs 和 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527333/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com