mikrocontroller.net

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


Autor: baer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht 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.htm...

Ich habe es jetzt nicht ausprobiert, aber der g++ Preprozessor soll 
seine Include-Verzeichnisse z.B. mit
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
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.

Autor: baer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: baer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsch...

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

Autor: Ordner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
baer schrieb:

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



find / -name sqlite.h -print

Autor: Hannes Jaeger (pnuebergang)
Datum:

Bewertung
0 lesenswert
nicht 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!)

Autor: baer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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'
sqlite3_open("phpLiteAdmin/test.db", &db);
> undefined reference to `sqlite3_errmsg'
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
> undefined reference to `sqlite3_exec'
sqlite3_exec(db, sql, callback, 0, &errMsg);
> undefined reference to `sqlite3_free'
sqlite3_free(errMsg);
> undefined reference to `sqlite3_close'
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

Autor: baer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
okay,... der richtige befehl war:

gcc write2db.c -o write2db -lsqlite3

Autor: baer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: tictactoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (rmagnus)
Datum:

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

Für den Compiler:
pkg-config --cflags sqlite3
Für den Linker:
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
Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.