我正在用golang做一些协议栈编程。我将编解码器放入C。并使用简单的CMake配置构建C,如下所示: cmake_minimum_required(VERSION 2.8)
项目(Demo1)
$ ssh username@your_ip_address
并使用这种代码链接共享库
aux_source_directory(. DIR_SRCS)
add_library(codecLib SHARED ${DIR_SRCS})
最后,在使用命令构建它时遇到以下错误 “ CGO_ENABLED = 1 GOOS = linux GOARCH = amd64 go build”,
//#cgo CFLAGS:-I./codec/
//#cgo LDFLAGS: ./codec/build -lcodecLib
//#include <protocol.h>
import "C"
import "fmt"
我尚未找到解决方案。感谢您提供解决方案。
答案 0 :(得分:1)
您遇到的问题可能是由于GOLang无法正确(或根本没有)解析GNU C库中的预处理程序命令。也可能是由于您的导入endian.h
有问题,或者需要其他C / GO / CGO导入或定义。
以下是waitstatus.h
(or see the full file on GitHub)的摘录:
# if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int __w_termsig:7;
unsigned int __w_coredump:1;
unsigned int __w_retcode:8;
unsigned int:16;
# endif /* Little endian. */
# if __BYTE_ORDER == __BIG_ENDIAN
unsigned int:16;
unsigned int __w_retcode:8;
unsigned int __w_coredump:1;
unsigned int __w_termsig:7;
# endif /* Big endian. */
您会注意到,相同的变量被两次声明-每个Endian变量一个。因此,GOLang出错了。如果知道要编译的字节序,则可以通过手动编辑文件来解决。