在PI上,我需要使用这个git:https://github.com/silentbobbert/pi_sensors的i2c.so库。当从这个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)
答案 0 :(得分:1)
正如其他人所说,这是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站点相比的适当内容。
最后,你看到应该的剩余错误应该以及它们基本上都是一样的。