去用C库构建,遇到stdlib.h中重复的成员

时间:2018-08-20 14:25:00

标签: c go cgo

我正在用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"

我尚未找到解决方案。感谢您提供解决方案。

1 个答案:

答案 0 :(得分:1)

您遇到的问题可能是由于GOLang无法正确(或根本没有)解析GNU C库中的预处理程序命令。也可能是由于您的导入endian.h有问题,或者需要其他C / GO / CGO导入或定义。

以下是waitstatus.hor 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出错了。如果知道要编译的字节序,则可以通过手动编辑文件来解决。