首页
学习
活动
专区
圈层
工具
发布

cgo目标-C
EN

Stack Overflow用户
提问于 2018-01-30 17:34:11
回答 1查看 792关注 0票数 0

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

代码语言:javascript
复制
// 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

我收到了很多错误:

代码语言:javascript
复制
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,但他说

cgo工具使用的是C,而不是Objective。

对于Objective类型,有什么方法可以获得GoLang等效(内存兼容)类型吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-11 13:12:09

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

代码语言:javascript
复制
// +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

产出:

代码语言:javascript
复制
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs -- -x objective-c cgodefs.go

package tmp

type CGPoint struct {
    X   float64
    Y   float64
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48527333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档