使用c库进行构建,遇到了stdlib.h中的重复成员
我正在用golang做一些协议栈编程。我将编解码器放在C中,并使用简单的CMake配置构建C,如下所示:使用c库进行构建,遇到了stdlib.h中的重复成员,c,go,cgo,C,Go,Cgo,我正在用golang做一些协议栈编程。我将编解码器放在C中,并使用简单的CMake配置构建C,如下所示: cmake_minimum_required (VERSION 2.8) project (Demo1) aux_source_directory(. DIR_SRCS) add_library(codecLib SHARED ${DIR_SRCS}) 并用这种代码链接共享库 //#cgo CFLAGS:-I./codec/ //#cgo LDFLAGS: ./codec/bui
cmake_minimum_required (VERSION 2.8)
project (Demo1)
aux_source_directory(. DIR_SRCS)
add_library(codecLib SHARED ${DIR_SRCS})
并用这种代码链接共享库
//#cgo CFLAGS:-I./codec/
//#cgo LDFLAGS: ./codec/build -lcodecLib
//#include <protocol.h>
import "C"
import "fmt"
我还没有找到解决办法。非常感谢您的解决方案。您遇到的问题可能是由于GOLang没有正确解析GNU C库中的预处理器命令(或者根本没有解析)。这也可能是由于导入
endian.h
时出现问题,或者需要其他C/GO/CGO导入或定义
以下是waitstatus.h
()的摘录:
您会注意到,相同的变量会被宣布两次——每个Endian一个。GOLang因此而出错。如果您知道要编译哪个endian,可以通过手动编辑文件来解决此问题。我遇到了同样的问题。我根本没有使用stdlib。错误仍然存在。预处理是正确的。它将_字节_顺序与ENDIAN进行比较。一个变量不可能同时有两个不同的值谢谢,这有助于我发现我的项目中有一个导致此错误的endian.h头文件。很高兴听到@RaphaelYu。如果答案有帮助,就接受它:)
In file included from /usr/include/stdlib.h:42:0,
from _cgo_export.c:2:
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:79:15: error: duplicate member ‘__w_retcode’
unsigned int __w_retcode:8;
^
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:80:15: error: duplicate member ‘__w_coredump’
unsigned int __w_coredump:1;
^
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:81:15: error: duplicate member ‘__w_termsig’
unsigned int __w_termsig:7;
^
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:93:15: error: duplicate member ‘__w_stopsig’
unsigned int __w_stopsig:8; /* Stopping signal. */
^
/usr/include/x86_64-linux-gnu/bits/waitstatus.h:94:15: error: duplicate member ‘__w_stopval’
unsigned int __w_stopval:8; /* W_STOPPED if stopped. */
# 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. */