C Compiler Fehler: nicht deklarierte (erste Benutzung in dieser Funktion)
Auf dem PI, ich brauchte den i2c.also Bibliothek, die mit diesem git: https://github.com/silentbobbert/pi_sensors. Beim laufen makefile aus diesem git, um die i2c.so erhielt ich diese Fehlermeldung:
Hier sind die .c und der .h-Dateien:
https://github.com/silentbobbert/pi_sensors/tree/master/Info/LinuxInterface
Referenz, hier ist der Inhalt von 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)
- Von "C#", habe Sie eigentlich "C"?
- naja, in der URLs
C#
ist nurC
mit einem leerenid
😉 - Nein, das sln ist in c#, die dies erfordert Bibliothek
- Hier sind die .c und der .h-Dateien: github.com/silentbobbert/pi_sensors/tree/master/Info/...
- Dieser code ist C, bist du mit GCC. Die Frage hat nichts zu tun mit C#, AFAICS..
- ok, danke ich werde den Verweis entfernen, c#
- Auch wenn der compiler denkt, es fanden alle Header, die es braucht, es gibt ein großes problem mit fehlenden Informationen. Sie sollten im Idealfall finden Sie heraus, wo
ioctl()
deklariert (erste Nachricht). Der rest der Nachrichten möglicherweise nicht einschließlich dieioctl()
header, aber wohl eher irgendwie mit deri2c*
Funktionen und Namen, die nicht gefunden wird in der Kopfzeile, wo Sie zu erwarten sind. Vielleicht brauchen Sie, um die Spur, die Header sind enthalten: hinzufügen-H
den GCC-Befehlszeile-Optionen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wie schon andere gesagt haben, das ist C code und nicht C#.
Jedenfalls, Sie haben zwei Fehler (und Sie beziehen sich nicht direkt auf das makefile, sondern in Ihrer Zusammenstellung Umgebung und der code selbst.
OK, so wie zu nähern, so etwas wie dieses. Erste Ankündigung die erste Zeile in der screen-capture -, das ist der Befehl, der ausgeführt wird, dass die Erzeugung der Fehlermeldungen, werde ich es reproduzieren Sie hier für Euch;
Mit diesem Befehl, den wir kompilieren (beachten Sie die -c flag) eine Reihe von Quelldateien in eine einzige Objekt-Datei, die Präsenz der `c' - flag bedeutet, dass keine Verbindung erfolgt hier. Dies ist wichtig, damit wir wissen, wo entlang der tool-Kette, die wir sind, und die Art der Fehler, die wir erwarten können (in der Regel entweder syntax Fehler oder fehlende header-Dateien).
Den ersten Fehler;
irgendwie sagen: "hey, ich kann sehen, dass
ioctl
ist eine Funktion, aber Sie haven T erzählte mir nichts davon, also gehe ich davon aus, dass seine Unterschrift istint ioctl()
— eine Funktion mit einer unbestimmten (aber Feste, nicht Variable) Liste von Argumenten zurückgibtint
". Da Sie kompilieren auf einem Linux-basierten system, das hinzufügen#include <sys/ioctl.h>
an den Anfang der Datei, sollte diese Fehler beheben.Den zweiten Fehler;
ist im Zusammenhang mit dem ersten Fehler; und es ist ein bisschen, sagen 'hey, haben Sie nicht erzählte mir etwas über I2C_SMBUS_BYTE'. Wieder der häufigste Grund für zu sehen, dieser Fehler ist eine fehlende header-Datei. Blick auf die Quelldateien haben Sie einen link bereitgestellt hat, es scheint, dass
I2C_SMBUS_BYTE
definiert istdie header-Datei
i2c-dev.h
, die jedoch angezeigt werden, enthalten ini2cset.c
durch:#include <linux/i2c-dev.h>
.An dieser Stelle möchte ich versichern, dass Ihre compiler (gcc) finden die header-Datei. Aus den Fehlermeldungen die Sie bekommen, ich vermute, dass ist es nicht, aber Sie sollten sehen, eine Fehlermeldung vom compiler über nicht in der Lage, die Datei zu finden. Auch, wenn die Datei auf Ihrem system überprüfen, um zu sehen, ob die entsprechenden Inhalte im Vergleich zu den git-Website.
Schließlich bleiben die Fehler, die Sie sehen sollte behoben werden, wie gut Sie sind alle im Grunde die gleiche Sache.
find / -name ioctl.h
und sehen, ob die header-Datei irgendwo auf Ihrem system.