繁体   English   中英

C编译错误:未声明(此函数中的第一次使用)

[英]C compilation errors: undeclared (first use in this function)

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

在此处输入图片说明在此处输入图片说明

这是.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#。

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

OK,那么如何处理这样的事情。 首先,请注意屏幕截图的第一行,即正在执行的命令正在生成错误消息,在此为您重现。

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站点相比是否具有适当的内容。

最后,您所看到的剩余错误应该是固定的,因为它们基本上都是同一件事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM