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
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.
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
Falsch... der Typ war: php/ondrej und die Packages waren > php7.0 > sqlite3-php7.0 > sqlite3
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!)
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
okay,... der richtige befehl war: gcc write2db.c -o write2db -lsqlite3
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 ;)
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.