Standardbibliotheken Linken

betzi1985

Grünschnabel
Hallo wie einige sicher wissen, beschäftige ich mich seit neustem mit der Programmierung und damit CPP. Ich möchte natürlich auch verstehen, was passiert. Nachdem man programmiert hat.(compilieren und linken). Ich könnte natürlich einfach auf eine IDE klicken und fertig, aber ich möchte es wirklich verstehen. Später wenn ich große Projekte programmiere möchte ich ja nicht immer alles compilieren und linken, da dies ja unter Umständen sehr lange dauern kann, deswegen beschäftige ich mich jetzt von Anfang an mit Makefils. Ich schreibe meinen Code in VIM und schreibe das Makefile in dem ich mit compilieren und linke. Das funktioniert auch alles wunderbar. Jetzt meine Frage. Kann man auch C++ Standardbibliotheken mit linken? Beispiel wenn ich ein einfaches

Code:
#include<iostream>

int main(){

  cout << “Hallo Welt!\n“;

  return 0;

}


Ich möchte jetzt so compilieren und linken in meinem Makefile, dass es. definitiv bei dem anderen läuft, ohne das er Bibliotheken installieren muss, sondern alles vorhanden ist.

Gibt es Befehle um zu schauen welche Bibliotheken in meinem programmierten Programm vorhanden sind? Kann man dIe dann auch Linken?

Mein Makefile sieht aktuell so aus:
Code:
HalloWeltMain: HalloWeltMain.o
        g++ -o HalloWelt HalloWeltMain.o

HalloWeltMain.o: HalloWeltMain.cpp
        g++ -c HalloWeltMain.cpp

clean:
        rm -f *.o
        rm -f HalloWelt

Hoffe konnte erklären, was genau ich möchte.

Gruß Betzi
 

ikosaeder

Teekannen-Agnostiker
Bibliotheken mit einbinden geht. Nennt sich static linking. Im Gegensatz zu dynamic linking. Allerdings werden die Executables dabei viel größer.
Der Befehl ldd (unter Linux) gibt eine Liste aller dynamisch gelinkten Bibliotheken und deren Pfad (falls sie gefunden werden).
Für Windows gibt es da auch Tools (process explorer und listdlls).
 

Technipion

Erfahrenes Mitglied
Hi, ich verstehe zwar den Sinn dahinter nicht ganz, aber du kannst die C++ Standardbibliothek über -lstdc++ mitlinken. Soweit ich weiß macht g++ das aber (im Gegensatz zu gcc) automatisch für dich.
 

ikosaeder

Teekannen-Agnostiker
Hi, ich verstehe zwar den Sinn dahinter nicht ganz, aber du kannst die C++ Standardbibliothek über -lstdc++ mitlinken. Soweit ich weiß macht g++ das aber (im Gegensatz zu gcc) automatisch für dich.
Ich denke er versucht das Verhalten von Docker nachzubauen in dem er die komplette Runtime Environment mit einbindet.
 

betzi1985

Grünschnabel
Hi, ich verstehe zwar den Sinn dahinter nicht ganz, aber du kannst die C++ Standardbibliothek über -lstdc++ mitlinken. Soweit ich weiß macht g++ das aber (im Gegensatz zu gcc) automatisch für dich.
Naja, wenn ich das richtig verstanden habe was ich gelesen habe, wäre es so möglich das mein compiliertes Programm so definitiv zumindest mal auf allen Linuxdistris läuft, ohne das derjenige irgendwelche Bibliotheken verwenden muss. Ich weiß, die C++ Standardbibliothek ist zu linken ist schwachsinn, aber ich wollte es für mich mal wissen. Ich denke mal mit dem Befehl -lBibliothek lassen sich somit auch nicht Standardbibliotheken mit linken, wo es dann schon interessanter wird.

Soweit ich gelesen habe, macht es wohl g++ nicht, weil davon ausgegangen wird, das die stdcc++ wohl eh immer vorhanden ist.

Viele Grüße

Betzi
 

ComFreek

Mod | @comfreek
Moderator
Naja, wenn ich das richtig verstanden habe was ich gelesen habe, wäre es so möglich das mein compiliertes Programm so definitiv zumindest mal auf allen Linuxdistris läuft, ohne das derjenige irgendwelche Bibliotheken verwenden muss.
Ja, aber beachte, dass Sicherheitsupdates dieser Libs dann von dir (anstatt etwa des Package Managers vom System) abhängen.

Ich weiß, die C++ Standardbibliothek ist zu linken ist schwachsinn, aber ich wollte es für mich mal wissen.
Tatsächlich ist das kein Schwachsinn, ich glaube das C++-Frontend für LLVM unterstützt sogar zwei verschiedene Versionen von Standardbibliotheken.
 

Technipion

Erfahrenes Mitglied
Ich weiß, die C++ Standardbibliothek ist zu linken ist schwachsinn, aber ich wollte es für mich mal wissen.
Ich könnte natürlich einfach auf eine IDE klicken und fertig, aber ich möchte es wirklich verstehen.
Sich in tiefere Teile der Technik vorzuarbeiten ist doch kein Schwachsinn! Ich würde eher sagen das ist vorbildlich von dir. Ob es dir in der Praxis etwas bringt ist natürlich fragwürdig, aber zumindest hast du dir Wissen darüber angeeignet, das von jetzt immer in deinem Hinterkopf stecken wird ;)

Tatsächlich ist das kein Schwachsinn, ich glaube das C++-Frontend für LLVM unterstützt sogar zwei verschiedene Versionen von Standardbibliotheken.
Aha, schon wieder was gelernt! :D
 

Neue Beiträge