有没有办法构建一个 Go + C 应用程序:从主包 X 导入包 Y 和 Z。包 M 导出一个 go 回调 F。包 X 和 Y 都是用随附的 C 文件构建的,都想从 C 源代码调用 F。一般来说,我试图弄清楚如何从用于构建最终应用程序的其他模块中随附的 C 文件调用回调。我不知道如何实现这一点或类似的东西。我也对复杂的解决方案感兴趣。
3 回答
SMILET
TA贡献1796条经验 获得超4个赞
我无法让它以简单的方式工作 IMO。
给定X
导入Y
和 的主包Z
,两者都必须调用(从 C 源代码)F
在 package 中声明M
,
我不得不:
W1
为F
in创建一个小包装器Y
并将其导出以从Y
的 C 源中调用。W2
为F
in创建一个小包装器Z
并将其导出以从Z
的 C 源中调用。在
Y
CGO CPPFLAGS 中定义-DCALLBACK=W1
在
Z
CGO CPPFLAGS 中定义-DCALLBACK=W2
从 C 源代码中,任何地方,我现在都可以将其
F
称为CALLBACK
(是的,在内部,它们都是不同的东西,我指的是在一端使用单个名称在另一端调用单个函数)。
这是令人费解的,但它是有效的,尽管配置这样的宏并生成小包装器并不理想。如果有人能详细说明一个更简单的程序,我会很高兴。我尝试过的一切都以重复的符号或不可见的声明告终。
- 3 回答
- 0 关注
- 211 浏览
添加回答
举报
0/150
提交
取消