gpt4 book ai didi

C编译错误: undeclared (first use in this function)

转载 作者:行者123 更新时间:2023-11-30 15:31:58 25 4
gpt4 key购买 nike

在 PI 上,我需要使用此 git 的 i2c.so 库:https://github.com/silentbobbert/pi_sensors 。当从此 git 运行 makefile 来获取 i2c.so 时,我收到此错误:

enter image description here enter image description here

以下是 .c 和 .h 文件: https://github.com/silentbobbert/pi_sensors/tree/master/Info/LinuxInterface

作为引用,以下是 makefile 的内容:

SHELL = /bin/sh
CC = gcc
FLAGS = -c -Wall -Werror -fpic
DEBUGFLAGS = -O0 -D _DEBUG
RELEASEFLAGS = -O2 -D NDEBUG

TARGET = i2c.so
SOURCES = $(shell echo *.c)
HEADERS = $(shell echo *.h)
OBJECTS = $(SOURCES:.c=.o)

PREFIX = $(DESTDIR)/usr/local
BINDIR = $(PREFIX)/bin

all:
$(CC) $(FLAGS) $(RELEASEFLAGS) $(SOURCES)
$(CC) -shared -o $(TARGET) $(OBJECTS)

最佳答案

正如其他人所说,这是 C 代码而不是 C#。

无论如何,您有两个错误(它们不直接相关)与 makefile 相关,而是与您的编译环境和代码本身相关。

好的,那么如何处理这样的事情呢?首先注意屏幕捕获中的第一行,即正在执行的生成错误消息的命令,我将在此处为您重现它;

gcc -c -Wall -Werror -fpic -O2-D NDEBUG i2c_get.c i2c_set.c i2cbusses.c i2cset.c util.c

使用此命令,我们将一堆源文件编译(注意 -c 标志)到单个目标文件中,“c”标志的存在意味着此处不执行链接。这是相关的,因此我们知道我们处于工具链的哪个位置,以及我们可以预期的错误类型(通常是语法错误或缺少头文件)。

第一个错误;

i2cset.c: In function 'check_funcs'
i2cset.c:56:2 error: implicit declaration of function 'iotcl' [-Werror=implicit-function-declaration]

有点像在说,“嘿,我可以看到 ioctl 是一个函数,但你没有告诉我任何关于它的信息,所以我假设它的签名是 int ioctl() - 一个带有不确定(但固定,非可变)参数列表,返回 int "。鉴于您正在基于 Linux 的系统上进行编译,请添加 #include <sys/ioctl.h>到文件顶部应该可以修复此错误。

第二个错误;

i2cset.c:63:7: error: 'I2C_SMBUS_BYTE' undeclared (first use in this function)

与第一个错误有关;它有点像在说‘嘿,你还没有告诉我任何关于 I2C_SMBUS_BYTE 的事情’。同样,出现此错误的最常见原因是缺少头文件。查看您提供的链接的源文件,似乎 I2C_SMBUS_BYTE定义于头文件i2c-dev.h ,但它似乎包含在 i2cset.c 中通过:#include <linux/i2c-dev.h>

此时我将确保您的编译器 (gcc) 可以找到头文件。从您收到的错误消息来看,我猜它不是,但您应该看到来自编译器的关于无法找到该文件的错误消息。另外,如果该文件位于您的系统上,请检查与 git 站点相比是否具有适当的内容。

最后,您看到的剩余错误应该得到修复,因为它们基本上都是相同的。

关于C编译错误: undeclared (first use in this function),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com