go - 如何在 go 包之间共享 c 代码?
问题描述
如何在包之间共享 C 代码?当我试图从另一个包中包含头文件时,我得到:
Undefined symbols for architecture x86_64:
"_module2_c_func", referenced from:
__cgo_b9b83c92221d_Cfunc_module2_c_func in _x002.o
(maybe you meant: __cgo_b9b83c92221d_Cfunc_module2_c_func)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我的代码:
main.go:
package main
import (
"cgo_sample/module1"
"cgo_sample/module2"
)
func main() {
module1.Module1_invoke_c_func()
module2.Module2_invoke_c_func()
}
模块1/模块1.go:
package module1
/*
#include "../module2/module2.h"
*/
import "C"
func Module1_invoke_c_func() int {
return int(C.module2_c_func())
}
模块2/模块2.go:
package module2
/*
#cgo CFLAGS: -g -Wall
#include "module2.h"
*/
import "C"
func Module2_invoke_c_func() int {
return int(C.module2_c_func())
}
模块2/模块2.h:
#ifndef _MODULE1_H_
#define _MODULE1_H_
int module2_c_func();
#endif
模块2/模块2.c:
#include "module2.h"
int module2_c_func() {
return 12;
}
解决方案
推荐阅读
- c# - WPF DataGrid Checkbox 不更新源
- javascript - 向多个幻灯片添加 Swipeleft 和 swiperight 功能
- r - 如何删除未在 R 中注册为空格的额外空格
- java - Google Cloud Function java.lang.NoClassDefFoundError,同时遵循示例代码
- python - Python 文件丢失、权限不正确、格式不受支持或无效 错误
- flutter - 如何启用 webview cookie?
- sql - SQLPlus 是否有没有静态字母数量的灵活数据类型
- java - How to increment "01" as "02" ,"03"...."10","11" in java?
- javascript - 如何在 Node.Js 和 Discord.Js 中设置 TypoError 以使机器人加入语音频道
- terraform - 如何修复在 terraform 计划期间为资源产生了意想不到的新价值?