Forum: PC-Programmierung [anfängerfrage] wo finde ich die includedateien und wie ordne ich neue zu


von baer (Gast)


Lesenswert?

Hallo,

ich habe angefangen mit c/c++ beizubringen... habe mithilfe von 
tutorials und Co. schon einiges erreicht,... doch gerade hänge ich an 
einem "zu banalen" problem...

Ich Arbeite mit einem Raspberry und habe darauf Raspbian (ohne 
Oberfläche).

Wenn ich etwas Compilieren muss, habe ich auch "Includes" dabei ...
hier habe ich z.B. #include <stdio.h>...

> wo kann ich diese ~includes~ als "File" finden?

wenn ich neue nutzen möchte wie z.B. sqlite3 (habe ich bereits 
installiert),
> wie kann ich die NEUE hinzufügen, dass ich eben nicht
> gcc readFomDb.c ?!sqlite3.h!? -o neuesTool
> gesondert aufführen muss

reicht das diese in richtigen Ordner abzulegen!?

Vielen Dank

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

baer schrieb:
>> wo kann ich diese ~includes~ als "File" finden?

Auf Linux-Systemen zum Beispiel unter /usr/include und 
/usr/local/include. Aber es gibt viele Stellen wo die genau stehen. Der 
Compiler verwendet zwei Suchpfade (Listen von Verzeichnissen) und 
durchsucht diese Verzeichnisse nach den Dateien. Genaueres unter 
https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html#Search-Path

Ich habe es jetzt nicht ausprobiert, aber der g++ Preprozessor soll 
seine Include-Verzeichnisse z.B. mit
1
cpp -xc++ -v < /dev/null
anzeigen können.

> wenn ich neue nutzen möchte wie z.B. sqlite3 (habe ich bereits
> installiert),
>> wie kann ich die NEUE hinzufügen, dass ich eben nicht
>> gcc readFomDb.c ?!sqlite3.h!? -o neuesTool
>> gesondert aufführen muss

Du suchst dir heraus wo nach der Installation von sqlite3 (dem 
dev-Paket!) die Include-Datei steht. Ist sie in keinem voreingestellten 
Pfad, dann ergänzt du den Pfad mit -I
1
gcc ... -I/pfad/zum/verzeichnis

> reicht das diese in richtigen Ordner abzulegen!?

Lass sie da, wo der Paketmanager die Datei installiert hat. Zeige mit -I 
auf das Verzeichnis.

von baer (Gast)


Lesenswert?

Hannes J. schrieb:
> Lass sie da, wo der Paketmanager die Datei installiert hat. Zeige mit -I
> auf das Verzeichnis.

erstmal vielen Dank... das werde ich mir zu Herzen nehmen!

=> allerdings habe ich noch n problem mit SQLite...
während in PHP alles super läuft, kann ich C nicht kompilieren...
Fehler: er kann kein sqlite.h finden!

ich allerdings auch nicht...
apt-get install sqlite3
war mein befehl... vorher habe ich noch für php7 etwas von einem 
gewissen andrej eingebunden (wie gesagt php läuft)...

Das ganze ist nur ein "Test / Spielsystem" daher weiß ich nicht, ob ich 
hier nicht irgendwas "verbockt" habe...

hat jemand eine Idee (aus der ferne) für mich?

vielen Dank

von baer (Gast)


Lesenswert?

Falsch...

der Typ war: php/ondrej
und die Packages waren
> php7.0
> sqlite3-php7.0
> sqlite3

von Ordner (Gast)


Lesenswert?

baer schrieb:

> hat jemand eine Idee (aus der ferne) für mich?



find / -name sqlite.h -print

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

baer schrieb:
> => allerdings habe ich noch n problem mit SQLite...
> während in PHP alles super läuft, kann ich C nicht kompilieren...
> Fehler: er kann kein sqlite.h finden!
>
> ich allerdings auch nicht...

Warum glaubst du wohl habe ich folgendes geschrieben, sogar mit 
Ausrufezeichen?
>> Installation von sqlite3 (dem dev-Paket!)

von baer (Gast)


Lesenswert?

Hannes J. schrieb:
> Installation von sqlite3 (dem dev-Paket!)

ich habs überlesen und schäme mich sehr...
;/
kaum installiert man es, findet gcc auch das Bibliothek
... trotzdem habe ich noch "Fehler"...

> undefined reference to `sqlite3_open'
1
sqlite3_open("phpLiteAdmin/test.db", &db);
> undefined reference to `sqlite3_errmsg'
1
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
> undefined reference to `sqlite3_exec'
1
sqlite3_exec(db, sql, callback, 0, &errMsg);
> undefined reference to `sqlite3_free'
1
sqlite3_free(errMsg);
> undefined reference to `sqlite3_close'
1
sqlite3_close(db);

=> irgendwie habe ich das "gefühl" dass mein Tutorial nicht mit meiner 
Bibliothek zusammenpasst!?
> vieles habe ich von hier: 
http://souptonuts.sourceforge.net/code/simplesqlite3.c.html

von baer (Gast)


Lesenswert?

okay,... der richtige befehl war:

gcc write2db.c -o write2db -lsqlite3

von baer (Gast)


Lesenswert?

Okay,... cool jetzt läuft alles...

natürlich will ich jetzt nicht nur "blöd" in die Datenbank schreiben 
sondern will auch irgendwie "Optimierung" betreiben...

Hat denn jemand erfahrung mit SQLite3 auf einem Raspberry?
1. ab welcher Dateigröße wird es Problematisch? <- 300 Datensätze haben 
bei mir jetzt 24kB ... <- ich erwarte also einige "hundert MB" im Laufe 
der Monate...
2. wie schnell kann man beschreiben... nur um mal die grenzen 
auszutesten schreib ich jetzt mal nen tag im 50ms Sekundentakt (viel 
mehr macht mein ADC nicht)... Später will ich dann im 200ms Takt 
schreiben und vor allem nach einem Tag alle werte (mit Ausnahme von den 
Minütlichen werten) wieder ausfiltern.

=> ebenso wäre es nicht uninteressant nur Werte zu schreiben die sich 
ändern (oft passiert ja auch einfach mal nix) <- oder ist das bei den 
heutigen "Kapazitäten" eh EGAL?

Vielen Dank für Konstruktive Kritik und Tipps ;)

von tictactoe (Gast)


Lesenswert?

baer schrieb:
> 2. wie schnell kann man beschreiben... nur um mal die grenzen
> auszutesten schreib ich jetzt mal nen tag im 50ms Sekundentakt (viel
> mehr macht mein ADC nicht)... Später will ich dann im 200ms Takt
> schreiben und vor allem nach einem Tag alle werte (mit Ausnahme von den
> Minütlichen werten) wieder ausfiltern.

Das wird einen Raspberry Pi eher nicht in die Knie zwingen.

Die SD-Karte aber schon. Die wird so nach einer Woche hinüber sein, wenn 
nicht früher. Ich würde mir ein System ausdenken, das nicht alle 200ms 
tatsächlich auf die "Platte" (SD-Karte) schreibt, sondern nur alle halbe 
Stunde. Natürlich musst du dann auch damit rechnen, dass dann auch mal 
ein Stück der Daten fehlt, wenn der Worst-case eintritt.

von Rolf M. (rmagnus)


Lesenswert?

Solche für Compiler und Linker nötigen Parameter holt man sich übrigens 
am besten mit pkg-config.

Für den Compiler:
1
pkg-config --cflags sqlite3
Für den Linker:
1
pkg-config --libs sqlite3

Das kann man direkt im Makefile nutzen, um das automatisch aufzulösen.
Im Falle von sqlite3 steht da zugegebenermaßen nicht viel drin, aber bei 
anderen Libs gibt's da auch schon mal mehr.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

tictactoe schrieb:
> Die SD-Karte aber schon. Die wird so nach einer Woche hinüber sein, wenn
> nicht früher.

Du übertreibst. Mach aus den paar Wochen mal ein paar Jahre, dann wird's 
realistisch. Wahrscheinlich dauert es aber schon etliche Monate bis 
überhaupt mal zum ersten Mal irgendein Sektor gelöscht und neu 
beschrieben wird wenn er nur ein paar hundert MB braucht, nur neue Daten 
schreibt und noch ein Dutzend GB frei hat.

Außerdem wird der Schreibcache dafür sorgen daß nur alle paar Sekunden 
(10 oder 20 vielleicht) mal tatsächlich ein echter Schreibzugriff 
erfolgt.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.