Forum: PC-Programmierung RPi: Wie Linker-Integration von wiringPi


von Gerhard H. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

beim Raspi soll wiringPi/wiringSerial in ein vorhandenes
C-Beispielprogramm
(https://github.com/Sensirion/raspberry-pi-i2c-scd4x) integriert werden.
WiringPi liegt entpackt und betriebsbereit (gpio -v: Version 3.4) in
einem zweiten Verzeichnis. Wie ist das dem Beispielprogramm beiliegende
Make-File (im Anhang) nun zu ergänzen daß es beim Linken keine Fehler 
gibt (undefined reference to ... )?

Dank&Gruß Gerhard

von J. S. (jojos)


Lesenswert?

Wie ich das sehe wird wiring Pi nicht verwendet. Es sollte reichen 
build-essential zu installieren wie im readme beschrieben.

von Gerhard H. (Gast)


Lesenswert?

J. S. schrieb:
> Wie ich das sehe wird wiring Pi nicht verwendet

Es soll aber später verwendet und deshalb ins Programm integriert 
werden.

von J. S. (jojos)


Lesenswert?

Dann würde ich mich an einem wiring Pi Beispiel orientieren:
https://github.com/WiringPi/WiringPi/tree/master/examples

Die zusätzlichen libs werden mit -l angegeben und müssen im Suchpfad für 
die libs vorhanden sein.

von Gerhard H. (Gast)


Lesenswert?

J. S. schrieb:
> Die zusätzlichen libs werden mit -l angegeben und müssen im Suchpfad für
> die libs vorhanden sein.

Ja, soweit hab ich es auch schon durchschaut...
Doch egal wie ich es anstelle- es hagelt Fehler.
Immer wieder absurd, wie kryptisch und umständlich diese 
C-Programmierung funktioniert. Make - eine Geheimwissenschaft :)

von Boris F. (skyperhh)


Lesenswert?

Gerhard H. schrieb:
> Ja, soweit hab ich es auch schon durchschaut...
> Doch egal wie ich es anstelle- es hagelt Fehler.

Kompiliert denn das wiring Pi Beispiel ohne Fehler?
Welche Fehlermeldung kommen denn? Vielleicht sind sie für andere Leute 
leichter verständlich und führen zu einer Lösung?

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Ja, soweit hab ich es auch schon durchschaut...
> Doch egal wie ich es anstelle- es hagelt Fehler.

Zeig' doch mal.

Hast Du dran gedacht, daß Du für "libblafusel.a" als Linkeroption 
"-lblafusel" und nicht "-llibblafusel.a" verwenden musst?

Hast Du --wie in einem anderen Thread hier-- den Unterschied zwischen 
Library und Headerdatei verstanden? Wenn eine "lib" im Arduino-Sprech 
gemeint ist, ist das meistens keine Library, sondern eine Headerdatei, 
und die wird nicht mit -l dem Linker übergeben, sondern in Deinem 
Sourcefile mit #include eingebunden.

Alternativ ließe sich das als Kommandozeilenoption für den Compiler 
angeben, da ist das dann "-include blafusel.h".

Das ist aber aus Gründen der Übersichtlichkeit und Nachvollziehbarkeit 
nicht zu empfehlen.

von Gerhard H. (Gast)


Lesenswert?

Das Build-File = die Lib wiringPi.h wurde ordnungsgemäß in 
usr/local/include als wiringPi.h erzeugt und wird von mir im 
Beispielprogramm beschwerdefrei #include t. Damit sollte der 
Compilier-Maschinerie doch alles bekannt sein. Aber warum einfach wenn 
es auch kompliziert geht: Sobald nun eine Funktion daraus aufgerufen 
wird folgt unverständlicherweise trotzdem ein Linker-Fehler "undefined 
reference to".
Der wiredPi Dokumentation zufolge ist den Compilierparametern 
(zusätzlich?) -lwiringPi hinzuzufügen. Das müsste ja nun irgendwo in 
obigem Make-File geschehen, genauso wie die Angabe weiterer wiringPi 
Files !??

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Der wiredPi Dokumentation zufolge ist den Compilierparametern
> (zusätzlich?) -lwiringPi hinzuzufügen.

Das ist die klassische Vorgehensweise.

Deine "wiringpi.h" ist keine Library, sondern nur eine Headerdatei, in 
der Deklarationen für Funktionen und Typen drinstehen, aber kein Code.

Der Code kommt (in vorverdauter Form) aus der Library libwiringpi.a, und 
Du musst diese dem Linker vorwerfen, damit der den Code zu Deinem 
Programm dazulinken* kann.

Zeig' doch mal Dein makefile.

Da sollte man den Compiler- und den Linkeraufruf erkennen können; ich 
nehme mal an, daß Dein Projekt aus mehr als einem Sourcefile besteht, 
oder?


*) manche finden es schicker, hier "gegen" zu sagen, warum auch immer.

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Zeig' doch mal Dein makefile.

Siehe ganz oben.
Es ist das Makefile des Beispielprogramms welches entsprechend 
abgeändert werden soll.

von Harald K. (kirnbichler)


Lesenswert?

Ach so, ich hatte angenommen, daß Du da schon was eigenes gestrickt 
hättest.

Du schreibst "wie auch immer Du es anstellst" - und genau das wollte ich 
eigentlich sehen, nicht das, wo Du noch gar nichts angestellt hast.

Denn daß dem Linker mit -l mitgeteilt werden muss, welche Library zu 
verwenden ist, hat Dir schon jojos mitgeteilt.

Ich hatte angenommen, daß Du daraufhin schon was gemacht hättest.


Nun gut.

Da in dem Makefile da oben alles über den Compileraufruf $(CC) erfolgt, 
würde ich der Zeile CFLAGS noch die Option -lwiringPi einsetzen.

Und wenn das nicht genügt, würde ich noch die Option -L verwenden, bei 
der das Verzeichnis anzugeben ist, in dem libwiringPi.a liegt.

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> würde ich der Zeile CFLAGS noch die Option -lwiringPi einsetzen

Habe ich. Ändert nichts.

> würde ich noch die Option -L verwenden, bei
> der das Verzeichnis anzugeben ist, in dem libwiringPi.a liegt

In der Dokumentation zur Verwendung von wiringPi habe ich von keiner 
solchen Datei gelesen. Im wiringPi Verzeichnis existiert sie 
ebensowenig. Wo sollte die denn zu finden sein?

Nach wie vor verstehe ich nicht, warum ein

#include <wiringPi.h>

im Beispielprogramm scd4x_i2c_example_usage.c nicht ausreicht.

Hoch undurchsichtig das Ganze.

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Im wiringPi Verzeichnis existiert sie
> ebensowenig. Wo sollte die denn zu finden sein?

Dann musst Du die Library erst aus dem Sourcecode von wiringpi erzeugen.

Sieh Dir mal das Makefile hier an:

https://github.com/WiringPi/WiringPi/blob/master/wiringPi/Makefile

Die Library setzt sich aus einer ganzen Menge einzelner Sourcefiles 
zusammen (sie werden mit SRC = aufgelistet).

Und dieses Makefile erzeugt, wenn Du es korrekt aufrufst, eine Datei 
namens libwiringPi.a bzw. libwiringPi.so

(der Name steht in Zeile 34/35)


Gerhard H. schrieb:
> Nach wie vor verstehe ich nicht, warum ein
>
> #include <wiringPi.h>
>
> im Beispielprogramm scd4x_i2c_example_usage.c nicht ausreicht.

Hast Du Dir die Datei mal angesehen?

https://github.com/WiringPi/WiringPi/blob/master/wiringPi/wiringPi.h

Da steht nur drin, daß es irgendwo Funktionen gibt. Das nennt man 
Funktionsprototypen oder Deklarationen.

Der Quelltext der Funktionen ist da aber nicht drin.

Damit kann Dein Compiler Deinen Sourcecode übersetzen, aber der Linker 
ist nötig, um den zu den Funktionen gehörenden Code dazuzupacken. Und 
der muss natürlich wissen, wo der zu finden ist - deswegen gibt es die 
Optionen -l und -L.


Wenn Du z.B. die Funktion printf verwendest, musst Du #include 
<stdio.h> angeben. Aber auch in dieser Datei steht nicht der Quellcode 
dieser Funktion drin, sondern nur die Deklaration dieser Funktion.

Der Binärcode der Funktion ist in der libc zu finden, die standardmäßig 
zu Deinen Programmen dazugelinkt wird.


Das ist bei Libraries in C immer so organisiert. In C++ kann es auch 
anders organisiert werden, ist es aber zu großen Teilen auch nicht.

So etwas wird unter anderem aus Geschwindigkeitsgründen gemacht - es ist 
völlig sinnlos, den Quellcode von Funktionen wie printf jedes Mal erneut 
zu übersetzen.

Es bedeutet aber nicht, daß zu Deinem Programm immer alles dazugestopft 
wird, was in der Library drin ist; der Linker holt sich aus der Library 
nur den Code der benötigten Funktionen.

Das Dateiformat von Libraries (*.a) ist eine Sammlung mehrerer 
Objektdateien (*.o), die beim Übersetzen der Librarysourcen aus den 
Quelltextdateien erzeugt werden.


Zurück zu Deinem Makefile-Problem.

Sieh Dir mal dieses Makefile an:

https://github.com/WiringPi/WiringPi/blob/master/wiringPi/test/Makefile

Das baut ein paar Testprogramme für wiringPi.

(Ausschnitt)
1
wiringpi_test1_sysfs: 
2
  ${CC} ${CFLAGS} wiringpi_test1_sysfs.c -o wiringpi_test1_sysfs -lwiringPi

Und siehe da, da steht -lwiringPi


--
Ich sehe gerade, daß die Library nicht mehr als statische Library gebaut 
wird, sondern nur als dynamische (oder "shared") Library, damit sollte 
Dein Buildsystem aber klarkommen.

Orientiere Dich am Test-Makefile.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Gerhard H. schrieb:

> Nach wie vor verstehe ich nicht, warum ein
>
> #include <wiringPi.h>
>
> im Beispielprogramm scd4x_i2c_example_usage.c nicht ausreicht.
>
> Hoch undurchsichtig das Ganze.

Nö, ist eigentlich recht simpel. Im Header (das ist die Sache mit *.h) 
steht normalerweise bloß, dass es da irgendwo eine Funktion gibt, wie 
die heisst und welche Signatur sie hat. Das genügt erstmal für den 
Compiler, um das Objektfile für deine C-Datei zu erzeugen, die diese 
Funktion benutzt. In diesem Objectfile steht dann drinne, dass da noch 
eine Funktion fehlt (genau genommen: nur deren konkrete Adresse fehlt 
noch).

Diese fehlende Funktion kann nun aus zwei Quellen kommen.

Entweder gibt es auch noch eine wiringpi.c. Dann musst du dem Compiler 
sagen, dass er diese Datei bitte auch zu einem Objectfile verarbeiten 
möge. Dann ist diese Funktion halt in der Objectdatei, die aus der 
wiringpi.c erzeugt wird. Und da steht wiederum drinne: hallo, ich habe 
hier eine Funktion mit diesem und jenen Namen, die aufgerufen werden 
könnte.

Oder irgendjemand hat dir diesen Teil schon abgenommen und sozusagen 
vorab compiliert. Dann landet das Ergebnis in einer Datei mit der Endung 
"a". Der Compiler bei dir hat mit dieser *.a-Datei aber überhaupt nichts 
zu tun.

Der eigentliche Trick passiert in der zweiten Stufe, beim Linken. Der 
Linker entscheidet in letzter Instanz, auf welcher Adresse eine Funktion 
konkret landet. Und er durchsucht alle anderen Objekte nach Referenzen 
auf diese Funktion und trägt dort die korrekte Adresse ein. Das ganze 
nennt sich Relozierung oder Relokation. Der Name kommt daher, das jedes 
einzelne Objekt vom Compiler zunächst erstmal so übersetzt wird, als 
würde es bei Adresse 0 beginnen. Das geht natürlich in der Realität 
nicht. Der Linker zieht das glatt und sorgt dafür, dass im realen 
Speicher später nix überlappt.

Kann er aber nicht, wenn es die referenzierte Funktion nirgendwo gibt. 
Dann kommt genau deine Fehlermeldung. Der Linker muss also mitgeteilt 
bekommen, dass und wo es entweder eine wringpi.o gibt (falls bei dir vom 
Compiler aus der wiringpi.c erzeugt) oder halt die wiringpi.a.

Diese ganze Sache mag ziemlich aufwendig erscheinen, hat aber deutliche 
Vorteile. Z.B. kann der Linker feststellen, dass es einen Arschvoll 
Funktionen gibt, die überhaupt niemals referenziert werden. Dann kann er 
die einfach rauswerfen, bevor er das Endergebnis produziert. Sprich: den 
Code kleiner machen.

von Gerhard H. (Gast)


Angehängte Dateien:

Lesenswert?

Wiegesagt, die Ergänzung von -lwiringPi in der Makefile- CFLAGS Zeile 
bewirkt nichts.

Harald K. schrieb:
> Dann musst Du die Library erst aus dem Sourcecode von wiringpi erzeugen.

Eine solche infrage kommende ist mit dem ./build des installierten 
wiringPi offensichtlich erzeugt und fand ich (nicht als .a aber) unter 
/usr/local/lib/libwiringPi.so.3.4.

> Und
> der muss natürlich wissen, wo der zu finden ist - deswegen gibt es die
> Optionen -l und -L.

Zu finden ist die Lib also in einem dafür offensichtlich vorgesehenen 
Verzeichnis /usr/local/lib und die offensichtliche Frage ist, warum das 
nicht automatisch berücksichtigt wird...?? Bislang habe ich das 
DazuLinkenMüssen der fertigen Lib noch in keinem einzigen wiringPi 
Beispiel gesehen und war der Meinung, dies würde schon irgendwie mit 
#include <wiringpi.h> realisiert wie eigentlich jeder gesunde 
Menschenverstand vermittelt. Und nein, da hatte ich deshalb noch nicht 
reingeschaut.
Was tut nun eigentlich obiges -lwiringPi Hilfreiches zur Sache?

Ob S. schrieb:
> Diese ganze Sache mag ziemlich aufwendig erscheinen

Sie ist es, noch wohlmeinend. Vor allem wenn man hier das lächerlich 
kleine Endergebnis (permanente Anzeige von 3 I2C-Messwerten) ins 
Verhältnis setzt. Da ist ja das Makefile fast schon größer als der 
eigentliche Code :)
Wenn, dann gewinnt dieser aufwendige Compilier/Link-Zirkus für riesige 
Programme mit x Quellen Sinn. Erst dann kann man auch die Ziele Code + 
Compilierzeit Reduzierung nachvollziehen.

Ich bin bislang keinen Millimeter weiter. Das Prozedere ist doch einfach 
nur irre.

Im Anhang das mit einem wiringPi-Lib Aufruf erweiterte Hauptprogramm, 
das mit -lwiringPi erweiterte Make-File und das unverändert 
unbefriedigende Compilier-Ergebnis auf der Pi-Kommandozeile.

von Martin H. (horo)


Lesenswert?

Gerhard H. schrieb:
> das mit -lwiringPi erweiterte Make-File

NEIN, das mit "-lwiringPi." erweiterte Make-File, der abschließende 
Punkt hat dort nichts zu suchen.

von Gerhard H. (Gast)


Lesenswert?

Martin H. schrieb:
> NEIN, das mit "-lwiringPi." erweiterte Make-File, der abschließende
> Punkt hat dort nichts zu suchen.

Soweit war ich bereits mit Experimentieren um herauszufinden, daß dieser 
Punkt (im Originalprogramm) durchaus notwendig war! Das Entfernen hat 
für mein obiges Compilierergebnis übrigens keinerlei sichtbare 
Auswirkung.

von J. S. (jojos)


Lesenswert?

der Punkt gehört eher zum Schalter -I, also aktuelles Verzeichnis 
inkludieren.
Ja es ist kompliziert, aber nur wenn man Grundlagen überspringen will 
und wild herumprobiert.

von Gerhard H. (Gast)


Lesenswert?

J. S. schrieb:
> der Punkt gehört eher zum Schalter -I

... womit Du den entscheidenden Nagel auf den Kopf getroffen hast, denn 
mit Punkt hinterm -I plus -lwiringPi läuft die Compilierung fehlerlos! 
Besten Dank an Dich und Martin. Angelegenheit geklärt. Ich dachte der 
Punkt wär irgendein notwendiger Zeilenabschluss. Das empfohlenene 
DazuLinkenMüssen der ganzen Lib ist damit wohl gegenstandslos.

> Ja es ist kompliziert

Bei meiner Einschätzung der Geschichte bleibe ich selbstredend.
Der eine bezeichnet es als "Grundlagen", der andere als in der Sache 
überflüssig...

von Norbert (der_norbert)


Lesenswert?

Gerhard H. schrieb:
> Bei meiner Einschätzung der Geschichte bleibe ich selbstredend.
> Der eine bezeichnet es als "Grundlagen", der andere als überflüssig...

Der eine weiß wovon er redet, der andere tendenziell eher nicht…

Wer nicht weiß an welcher Seite der Lötkolben heiß wird, wird es schon 
aus purem Eigennutz lernen wollen. (Oder ständig mit dampfenden Flossen 
herum laufen)

von J. S. (jojos)


Lesenswert?

Das läuft unter Unix schon seit Anno Tubak so. Ich benutze es auch 
selten, aber durch die vielen Anleitungen im Netz komme ich da meist 
schnell genug wieder rein. Es ist eben das Gleiche auf einem RPi wie 
unter irgendeinem Linux auf dem Desktop oder alter Unix Gurke.
Auf Unix System gibt es afaik die Umgebegungsvariablen für die 
(compiler) Includes und Libraries. Nur für Crosscompiling was ich eher 
mache müssen die Verzeichnisse explizit angegeben werden, aber im 
Prinzip ist das Kompilieren auf System einfacher. Vor allem einfacher 
als unter Windows wo Compiler nicht zum System gehören.

von Gerhard H. (Gast)


Lesenswert?

Norbert schrieb:
> Der eine weiß wovon er redet, der andere tendenziell eher nicht…

Wieviel vom Wovon Wo Sinn macht ist eher die Frage lieber Norbert.

J. S. schrieb:
> Das läuft unter Unix schon seit Anno Tubak so.

Das ist ja super, ist aber auch keine Entschuldigung für maßlose 
Umständlichkeit. Zumindest hier. Aus diesem Fenster lehne ich mich stur 
weiter. Wie man sieht sind sich ja selbst C-Experten da nicht einig.
Welchen Berg künstlicher Probleme ein C-Compiler so alles schaffen kann 
sieht man gerade recht anschaulich im 
Beitrag "GCC v14 Release"
Gleiches Problem in grün: Riesiger bürokratischer Aufwand für ein paar 
KB Endergebnis.

von Norbert (der_norbert)


Lesenswert?

Gerhard H. schrieb:
> Wieviel vom Wovon Wo Sinn macht ist eher die Frage lieber Norbert.

Dieser Thread beweist präzise, das vom ›Wovon‹ wohl noch so Einiges 
notwendig wäre.

von Gerhard H. (Gast)


Lesenswert?

Nun egal Norbert, Jojos & Martin haben eine überaus lästige Nuss für 
mich geknackt- da will ich hier nicht weiter auf C und dessen Compilier- 
Gewürge herumreiten. Meine C-Episode beschränkt sich darauf, obiges 
Programm mit etwas seriellem I/O und Datei-Abspeicherung zu erweitern. 
Das müsste ich jetzt alleine schaffen.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Gerhard H. schrieb:

> Nun egal Norbert, Jojos & Martin haben eine überaus lästige Nuss für
> mich geknackt- da will ich hier nicht weiter auf C und dessen Compilier-
> Gewürge herumreiten.

Das ist nicht nur bei C so, sondern praktisch bei jedem Compiler. Weil 
alle festgestellt haben, dass es (aus verschiedenen Gründen) sehr 
nützlich ist, die Codegenerierierung vom Adress-Mapping zu trennen.

Wenn dir das noch nie untergekommen ist, zeigt das nur eins: du bist 
wohl ein Scriptsprachen-Anfänger.

Nunja. Jeder hat mal angefangen. Aber: Als Script-Kiddie sollte man in 
Diskussionen mit den Erwachsenen eher kleine Brötchen backen...

von Gerhard H. (Gast)


Lesenswert?

Ob S. schrieb:
> Jeder hat mal angefangen

... und manch einer gleich wieder aufgehört. Aus Erfahrung soll man 
schließlich schlau werden. Ich habe wirklich nicht vor, aus dem Gewürge 
ein Hobby zu machen, Herr Erwachsener :)
Danke nochmal für die gutgemeinten erklärenden Worte weiter oben. Man 
kann den Aufwand aber nicht schönreden.

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Man kann den Aufwand aber nicht schönreden.

Es ist keiner. Wenn man das Konzept, wie ein C-Compiler und der 
dazugehörige Linker arbeitet, einmal verstanden hat, dann sind solche 
Dinge fast so selbstverständlich wie zu atmen.

Das ist elementares Grundlagenwissen.

Hier hat leider die Arduino-Fraktion durch ihren Versuch, das alles 
möglichst idiotensicher zu verstecken, und durch die ungeschickte 
Wortwahl viel Schaden angerichtet.

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Das ist elementares Grundlagenwissen.

Nun ich würde eher sagen, das sogenannte "Grundlagenwissen" vergangener 
Zeiten hast Du Dir mal mühsam angeeignet und das sollte irgendeine 
dahergelaufene Arduino- Fraktion mit ihrer Forderung nach Vereinfachung 
bitteschön jetzt nicht so schamlos entwerten.
Ich fordere das Gleiche. Das Leben ist einfach zu kurz für irgendwelche 
Parameter- Wüsten. Der fehlgesetzte Punkt steht einfach in keinem 
Verhältnis mehr zum Zeitbedarf und Ärger seiner Nichtbeachtung :)

von Harald K. (kirnbichler)


Lesenswert?

Dir wurde angeboten, Dir das nötige Grundlagenwissen anzueignen. Die 
hier relevanten Grundlagen wurden Dir nicht nur von mir erzählt.

Klar, Du kannst auch aufstampfen und schreien, daß das alles zu 
kompliziert ist und man Dir doch bitte einen neuen Lolli geben soll.

Aber dann kommst Du nicht weiter, und rennst jedesmal gegen die gleiche 
Wand.

Kann man so machen, ist dann halt nur blöd.

Und das bizarre ist: Anderswo schreibst Du, daß Du etliches bereits in 
Assembler veranstaltet hast. Also hast Du sogar einiges an 
Grundlagenwissen, das Dich weit über den Level der 
Arduino-rosa-Plüscheinhornfraktion erhebt.

Einen Linker kann man auch als Assemblerprogrammierer gebrauchen. 
Spätestens, wenn man nicht nur ganz triviale Projekte macht, kommt man 
doch eh' kaum dran vorbei.

: Bearbeitet durch User
von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Aber dann kommst Du nicht weiter, und rennst jedesmal gegen die gleiche
> Wand.

Keine unnötigen Sorgen Harald.

Gerhard H. schrieb:
> Meine C-Episode beschränkt sich darauf, obiges Programm mit etwas
> seriellem I/O und Datei-Abspeicherung zu erweitern. Das müsste ich jetzt
> alleine schaffen.

***

Harald K. schrieb:
> Einen Linker kann man auch als Assemblerprogrammierer gebrauchen.
> Spätestens, wenn man nicht nur ganz triviale Projekte macht, kommt man
> doch eh' kaum dran vorbei.

Meine Asm-Projekte sind weder trivial noch werden sie jemals einen 
Linker brauchen. Dann hätte ich was falsch gemacht...

von Le X. (lex_91)


Lesenswert?

Testet der Hauptmann gerade aus, in wievielen Threads man sich 
gleichzeitig zum Horst machen kann bevor auch dem letzten auffällt dass 
man trollt?

von Gerhard H. (Gast)


Lesenswert?

Le X. schrieb:
> Testet der Hauptmann gerade aus, in wievielen Threads man sich
> gleichzeitig zum Horst machen kann bevor auch dem letzten auffällt dass
> man trollt?

Da Du hier nichts zum Thema beiträgst fällt Dein Beitrag in genau diese 
Kategorie. Zu Deiner Info: Das Thema ist geklärt.

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Zu Deiner Info: Das Thema ist geklärt.

Andere nutzen sich bietende Möglichkeiten zur Weiterbildung.

Aber das würde den Horizont erweitern, und das kann natürlich bei 
besonders engstirnigen Zeitgenossen schmerzhaft werden.

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Andere nutzen sich bietende Möglichkeiten zur Weiterbildung.

Zunächst sieht man hier jetzt welche  die es gerne zur persönlichen 
Herabwürdigung nutzen. Nicht wahr, Harald? Die nötige "Weiterbildung" 
habe ich erhalten. Danke der Fürsorge.
Umständliches Gewürge mag den einen erfreuen, dem anderen aber Schmerzen 
bereiten. Nun rate mal wohin meine Tendenz geht...

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Zunächst sieht man hier jetzt welche  die es gerne zur persönlichen
> Herabwürdigung nutzen.

Den Schuh musst Du Dir schon selbst anziehen.

Gerhard H. schrieb:
> Die nötige Weiterbildung habe ich erhalten.

Nö, Du verweigerst Dich ihr. Wie auch Deine Behauptung, nichttriviale 
Assemblerprojekte ohne Gebrauch eines Linkers durchzuziehen.

Ich kannte mal einen Entwickler, der der Ansicht war, sämtlicher zu 
einem Assemblerprojekt gehörender Quelltext gehörte in eine Datei.

Weil das ja viel übersichtlicher wäre. Mit den ganzen Dateien käme man 
ja nur durcheinander.

(Und das war zu einer Zeit, wo man froh war, im Editor etwas über 20 
Zeilen Quelltext auf einmal sehen zu dürfen)

Aus irgendeinem Grund erinnerst Du mich an den.

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Den Schuh musst Du Dir schon selbst anziehen.

Den dummdreisten Stil eines Herrn, der Null zum Thema beigetragen hat 
noch so zu relativieren ist wenig redlich. Den Schuh mußt Du Dir 
anziehen!

> Ich kannte mal einen Entwickler, der der Ansicht war, sämtlicher zu
> einem Assemblerprojekt gehörender Quelltext gehörte in eine Datei

Eine Frage bequemer Handhabung und Minimierung organisatorischer 
Komplexität. Ab einem gewissen Umfang wiegt der Vorteil thematischer 
Gliederung in Include-Files dann schwerer. Echter wohlgemerkt. Daß aber 
bei dem winzigen Funktionsumfang obigen Beispielprogramms schon schweres 
Linker-Gerät samt Makefile in Stellung gebracht wird ist einfach nur 
hochgradig lächerlich. Den Umfang bringe ich in einem einzigen Asm-File 
unter!

Ich denke dabei können wir es belassen.

von J. S. (jojos)


Lesenswert?

Ja warum hast das dann nicht gleich bare metal und in Assembler auf dem 
Pi programmiert?

von Norbert (der_norbert)


Lesenswert?

J. S. schrieb:
> Ja warum hast das dann nicht gleich bare metal und in Assembler auf dem
> Pi programmiert?

Assembler ist doch nur etwas für Warmduscher.
Echte Kerle nehmen eine Tabelle mit Mnemonics und zugehörigen Hex-Werten 
in die Hand.

von Gerhard H. (Gast)


Lesenswert?

J. S. schrieb:
> Ja warum hast das dann nicht gleich bare metal und in Assembler auf dem
> Pi programmiert?

Ich programmiere Asm auf 8Bit-AVR.
Da passt es hin, dafür ist es geeignet. 32Bitter aufwärts sind was für 
Hochsprache.
Daß aber C-Programme obigen Umfangs immer noch so textlastig daherkommen 
ist doch recht typisch. Dabei sollte Hochsprache eigentlich den nötigen 
Programmtext verkleinern. Der kann sich auf dem RPi zusätzlich auf die 
Dienste eines Betriebssystems stützen. Wirklich verwunderlich ist das 
alles nicht mehr, wenn man allein schon den Compilierzirkus einmal in 
Aktion gesehen hat. C-Programmierung ist bürokratisch aufgeblasen wohin 
man schaut.

Und sorry, in Kategorien wie

Norbert schrieb:
> Echte Kerle

oder

Harald K. schrieb:
> Arduino-rosa-Plüscheinhornfraktion

denken nur Leute, die Programmierung möglichst kompliziert halten wollen 
um sich darin dann ziemlich herablassend sonnen zu können.

von Norbert (der_norbert)


Lesenswert?

Gerhard H. schrieb:
> Daß aber C-Programme obigen Umfangs immer noch so textlastig daherkommen
> ist doch recht typisch. Dabei sollte Hochsprache eigentlich den nötigen
> Programmtext verkleinern.

> Der kann sich auf dem RPi zusätzlich auf die
> Dienste eines Betriebssystems stützen.

Und was braucht man dazu, was nimmt man dazu?

Bibliotheken!

Und was macht man mit denen?

Zu den eigenen Objekt-Dateien hinzu linken!

Und womit geschieht das?

Mit dem Linker!

Kleiner Tipp Gerhard. Aus dem tiefen Loch das du dir bereits recht 
frühzeitig gegraben hast, kommst du nicht heraus indem du immer weiter 
immer tiefer gräbst.

von Gerhard H. (Gast)


Lesenswert?

Norbert schrieb:
> Aus dem tiefen Loch das du dir bereits recht frühzeitig gegraben hast

Erstaunlich, ich schnuppere eher Höhenluft. In tiefen (C-) Löchern 
sitzen andere...

Nix für ungut.
Die Welt ist wie sie ist.
Jeder Kläger müsste sich den Vorwurf gefallen lassen, selber nichts zu 
einer Verbesserung beigetragen zu haben. Soweit möchte ich es hier 
besser nicht kommen lassen ;-)

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Den dummdreisten Stil eines Herrn, der Null zum Thema beigetragen hat
> noch so zu relativieren ist wenig redlich.

Ach, ich habe "Null zum Thema beigetragen"?

Beitrag "Re: RPi: Wie Linker-Integration von wiringPi"
Beitrag "Re: RPi: Wie Linker-Integration von wiringPi"
Beitrag "Re: RPi: Wie Linker-Integration von wiringPi"
Beitrag "Re: RPi: Wie Linker-Integration von wiringPi"

Magst Du Dich entschuldigen?

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Ach, ich habe "Null zum Thema beigetragen"?

Wie kommst Du dazu es auf Dich zu beziehen? Ich schlage vor Du gehst den 
Chatverlauf nochmal zurück.
Wenn Du mit dieser Gewissenhaftigkeit auch programmierst dann weiß ich 
nicht was dabei rauskommt... :(

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Wie kommst Du dazu es auf Dich zu beziehen?

Weil Du gestörter Charakter MICH zitiert hast. "Schuh anziehen", schon 
vergessen?

von Gerhard H. (Gast)


Lesenswert?

Hinterfrage Dich nochmal was Du mit

Harald K. schrieb:
> Den Schuh musst Du Dir schon selbst anziehen.

gemeint hast. Nämlich meine Bemerkung

Gerhard H. schrieb:
> Zunächst sieht man hier jetzt welche  die es gerne zur persönlichen
> Herabwürdigung nutzen.

Preisfrage: Wer wird das wohl gewesen sein?

Und nein Harald, bloß weil Du Dich geirrt hast musst Du mir nicht gleich 
einen gestörten Charakter vorwerfen. Legitim wäre das allenfalls beim 
Troll weiter oben gewesen...

Für Deine sachlichen Einlassungen weiter oben bin ich dankbar- auch wenn 
ich in ebendieser Sache widerspreche.

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Preisfrage: Wer wird das wohl gewesen sein?

Da Du Dich auch bei diesem Beitrag wieder auf MICH bezogen und MICH 
zitiert hattest, ist es naheliegend, daß Du Dich auch bei Deiner Aussage 
auf MICH bezogen hast. Genauso, wie wir das gerade schon mal hatten. 
Insbesondere Dein  nachgesetztes "Nicht wahr, Harald?" lässt kaum auf 
anderes schließen, vor allem, wo in diesem Thread auch kein anderer 
Harald auftaucht.

Nicht wahr, Gerhard?!

Es wäre dem Diskussionsstil gedient, wenn Du nicht MICH zitieren 
würdest, um dann doch ganz andere Personen (ungenannt bleibende) meinen 
zu wollen.

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Es wäre dem Diskussionsstil gedient, wenn Du nicht MICH zitieren
> würdest, um dann doch ganz andere Personen (ungenannt bleibende) meinen
> zu wollen.

Ja Harald. Eine Sache über mehrere Ecken  im Verständnis zu behalten ist 
in der Schnelle des Lebens und der Reaktionen wohl nicht so einfach. 
Bloß weil Du zitiert wirst muß es ja noch lange nicht um Dich gehen, 
dazu sollte man dann schon die konkrete Aussage berücksichtigen. OK 
falsch verstanden, Schwamm drüber.

von Harald K. (kirnbichler)


Lesenswert?

Gerhard H. schrieb:
> Bloß weil Du zitiert wirst muß es ja noch lange nicht um Dich gehen,
> dazu sollte man dann schon die konkrete Aussage berücksichtigen.

Dann lern' Du das mal, wenn Du schon zitierst.

> OK falsch verstanden, Schwamm drüber.

Meinetwegen.

von Ein T. (ein_typ)


Lesenswert?

Le X. schrieb:
> Testet der Hauptmann gerade aus,

Das ist doch nur Moby, den kennen wir doch schon. Da er hier zurecht 
seit einigen Jahren Hausverbot hat, hat er seine Wortwahl leicht 
verändert, um nicht mehr sofort erkannt und gelöscht zu werden.

von Gerhard H. (Gast)


Lesenswert?

Oh da schiebt Ein T roll aber mächtig Frust. Hab ich Dir in der 
Vergangenheit auch wehgetan? Das tut mir aber leid :(

von J. S. (jojos)


Lesenswert?

Das ist den Moderatoren mit Sicherheit bekannt. Ich würde sagen 
Bewährung verkackt.
Die Geschichte vom Frosch und dem Skorpion.

von Gerhard H. (Gast)


Lesenswert?

Danke Jojos nochmal für den Tipp.
Auch wenn es nur ein . war :)

von Ein T. (ein_typ)


Lesenswert?

J. S. schrieb:
> Das ist den Moderatoren mit Sicherheit bekannt. Ich würde sagen
> Bewährung verkackt.

Ach, wer weiß. Aber es ist schon witzig, daß er jedesmal sofort reagiert 
und mich zu provozieren versucht, wenn ich an seine Identität erinnere. 
Offenbar habe ich ihn genug geärgert, daß er sich noch an mich erinnert, 
hihihi. :-)

von Harald K. (kirnbichler)


Lesenswert?

Ein T. schrieb:
> Das ist doch nur Moby, den kennen wir doch schon.

Meinst Du? Den hatte ich anders in Erinnerung. Das ist hier ein doch 
massiv abweichender Stil, ohne diese hämische Überheblichkeit, die bei 
"moby" aus jeder sich bietenden Körperöffnung quoll.

Nee, das halte ich für 'ne Fehldiagnose.

von Ein T. (ein_typ)


Lesenswert?

Harald K. schrieb:
> Nee, das halte ich für 'ne Fehldiagnose.

Ich hingegen bin da absolut überzeugt, bitte erinnere Dich an die 
Frühphase seiner Trollerei in allen C- und C++-Threads hier im Forum. 
Derselbe Duktus, derselbe Stil, eine trotz Verstellung sehr ähnliche 
Wortwahl, dasselbe Thema, grundsätzlich ist das alles genau wie weiland 
bei Moby. Auch daß es immer auf mich reagiert, und mich trotz 
fortwährender Mißerfolge immer und immer wieder auf dieselbe dumme Weise 
provozieren versucht, war für Moby typisch. Nee, Du, das da ist 
definitiv Moby.

von Gerhard H. (Gast)


Lesenswert?

Das muss ja in Deiner Historie eine wichtige Person gewesen sein.

> Auch daß es immer auf mich reagiert

Du meinst mich? Was wäre daran ungewöhnlich? Solange Du über einem 
gewissen Level bleibst kann man selbstverständlich antworten. Mach Dich 
doch hier zu nix besonderem...
hüstel

von Le X. (lex_91)


Lesenswert?

Harald K. schrieb:
> Das ist hier ein doch
> massiv abweichender Stil, ohne diese hämische Überheblichkeit, die bei
> "moby" aus jeder sich bietenden Körperöffnung quoll.

Dann schau dir mal seine Beiträge im Haus & Smart Home an.

von Martin H. (horo)


Lesenswert?

Um den Gedankenaustausch mal wieder ein wenig zurück in Richtung 
"PC-Programmierung" (so der Titel dieser Forensektion) zu bringen und 
auf eine etwas sachlichere Ebene zu stellen :)

Norbert schrieb:
> Assembler ist doch nur etwas für Warmduscher.
> Echte Kerle nehmen eine Tabelle mit Mnemonics und zugehörigen Hex-Werten
> in die Hand.

... und klickern das Programm über die Schalter auf der Rechnerfront 
ein. Wenn es z.B. um den "Bootloader" geht, hat man das bald automatisch 
drin, so wie Klavierspielen, ohne auf die Noten zu schauen.

von Gerhard H. (Gast)


Lesenswert?

Martin H. schrieb:
> Um den Gedankenaustausch mal wieder ein wenig zurück in Richtung
> "PC-Programmierung" (so der Titel dieser Forensektion) zu bringen

Einmal Assembler immer Assembler? Schwachsinn, so wie Eingabe über 
Schalter. Beiträge über Asm-PC Programmierung kannst Du von mir sehr 
lange suchen... Aber für 8Bit AVR passt's eben wie die Faust aufs Auge. 
Da käm mir nix anderes in den Sinn.
Deshalb darf es trotzdem jeder halten wie er mag. Wer ohnehin überall C 
& Konsorten einsetzt und beherrscht darf selbstredend auch die kleinsten 
Chips damit quälen :)

von Le X. (lex_91)


Lesenswert?

Gerhard H. schrieb:
> Aber für 8Bit AVR passt's eben wie die Faust aufs Auge.
> Da käm mir nix anderes in den Sinn.
> Deshalb darf es trotzdem jeder halten wie er mag. Wer ohnehin überall C
> & Konsorten einsetzt und beherrscht darf selbstredend auch die kleinsten
> Chips damit quälen :)

Einer der Moderatoren, weiß nicht mehr ob das Chris oder Jörg war, hat 
dich vor vielen Jahren doch mal ziemlich blöd dastehen lassen als du 
beweisen wolltest dass dein handoptimierter Asm-Code performanter und 
ressourcensparender sei als der Output  eines moderner C-Compilers.
Muss mal den Thread raussuchen.

In Anbetracht dieser Historie ist es etwas verwunderlich wie man das 
Maul soweit aufreissen kann.

: Bearbeitet durch User
von Gerhard H. (Gast)


Lesenswert?

Le X. schrieb:
> In Anbetracht dieser Historie ist es etwas verwunderlich wie man das
> Maul soweit aufreissen kann.

Welche Historie?
Permanent Unterstellungen am laufenden Band. Tipp: Führ Dir den Thread 
hier nochmal zu Gemüte. Dann kommst Du der Vorstellung näher, was mich 
persönlich und nicht irgendwelche Gestalten der Foren-Vergangenheit an 
C-Programmierung bzw. deren Umfeld massiv stört.
Danke, sehr ungern als Hobby.

Soll aber hier jetzt nicht als Stoff für völlig sinnlose 
Endlos-Diskussionen dienen :)

von Harald K. (kirnbichler)


Lesenswert?

Ich bleibe übrigens bei meiner Einschätzung. Gerhard mag sehr schräg 
drauf sein, aber er ist nicht "moby". Der spielt in einer ganz anderen 
Klasse.

(Auf heise kann man ihm übrigens begegnen, da nennt er sich "ttloop").

von Gerhard H. (Gast)


Lesenswert?

Harald K. schrieb:
> Gerhard mag sehr schräg drauf sein

Mit meinen solchen Urteilen halte ich solang es irgendwie geht lieber 
hinterm Berg. Schließlich soll doch die Sache im Vordergrund stehen. 
Sobald das Beteiligten aber nicht mehr möglich ist wirds immer 
persönlich :(

von Martin H. (horo)


Lesenswert?

Gerhard H. schrieb:
> Schwachsinn, so wie Eingabe über
> Schalter.

Hast Du schon einmal eine PDP-11 gesehen, die standen im letzten 
Jahrtausend in vielen Unis und Instituten. Siehe:

https://de.wikipedia.org/wiki/PDP-11#/media/Datei:Pdp11-70.jpg

von Gerhard H. (Gast)


Lesenswert?

Martin H. schrieb:
> Hast Du schon einmal eine PDP-11 gesehen

Nein. Die hat auch so gar keine Ähnlichkeit mit den kleinen Platinchen 
und aktuellen Chips die ich verarbeite- mit vermutlich deutlich mehr 
Rechenleistung ...

Nur einem Z80-Rechner aus meinem Inventar 
https://de.m.wikipedia.org/wiki/LC80 waren Asm Programme dereinst etwas 
umständlicher einzugeben :)

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.