使用 cgo 包装 <dispatch/dispatch.h> 时构建错误

我正在尝试使用 XPC、GCD 并继续运行,但是当我的代码无法编译时出现以下错误消息(我不明白),我很快就遇到了问题:


main(__DATA/__const): unexpected reloc for dynamic symbol _NSConcreteGlobalBlock main(__DATA/__const): unhandled relocation for _NSConcreteGlobalBlock (type 28 rtype 120)


我正在使用go build以下代码进行编译:


main.go


package main


/*

#include <xpc/xpc.h>

#include "wrapper.h"

*/

import "C"


import (

    "fmt"

)


//export HandleXPCEvent

func HandleXPCEvent(event C.xpc_object_t) {

    fmt.Println("Event was handled")

}


func main() {

    name := C.CString("com.example.xpc")

    queue := C.dispatch_queue_create(name, nil)

    conn := C.xpc_connection_create(name, queue)

    C.set_event_handler(conn)


    //C.xpc_connection_resume(conn)

}

包装器.h


#ifndef _WRAPPER_H_

#define _WRAPPER_H_


#include <stdlib.h>

#include <stdio.h>

#include <xpc/xpc.h>


xpc_connection_t connect( char* name);

void set_event_handler(xpc_connection_t connection);


#endif

包装器


#include "wrapper.h"

#include <dispatch/dispatch.h>


extern void HandleXPCEvent(xpc_object_t);


xpc_connection_t connect( char* name) {

    dispatch_queue_t queue = dispatch_queue_create(name,0);

    return xpc_connection_create(name,queue);

}


void set_event_handler(xpc_connection_t connection) {

    xpc_connection_set_event_handler(connection, ^(xpc_object_t event) {

        xpc_retain(event);

        // Call Go function

        HandleXPCEvent(event);

    });

}

我是不是做错了什么?这是某种 go 错误还是如何修复?


达令说
浏览 254回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go