ubuntuusers.de

g++ erstellt shared library anstatt executable

Status: Gelöst | Ubuntu-Version: Xubuntu 18.04 (Bionic Beaver)
Antworten |

buzz_lightzyear

Anmeldungsdatum:
8. Juni 2008

Beiträge: 424

Hallo,

ich habe heute ein kleines C++ Programm geschrieben. Wenn ich es so (wie immer) mit

g++ main.cpp -o hello

kompiliere, wird mir kein executable erstellt, sondern eine shared libary, welche ich aber normal mit ./test ausführen kann. Wahrscheinlich hätte ich es nicht mal bemerkt, aber ich wollte mit dem Data Display Debugger arbeiten und der konnte die Datei anscheinend nicht öffnen, da hab ich gesehen, dass es eine shared library ist. Der File-befehl gibt mir folgende Information:

hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=ed51e4368a3312e69119b1c6e6cd214cb540a1e9, not stripped

Die main-Funktion ist normal drinnen.

Kann mir jemand sagen, warum das so ist, verstehs grad echt nicht... O_O

Thx & lg buzzzzz

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

buzz_lightzyear schrieb:

kompiliere, wird mir kein executable erstellt, sondern eine shared libary,

Das ist ein ganz normales Binary. Das ist der gleiche Typ wie z.B. ls:

1
2
3
$ file /bin/ls foo
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped
foo:     ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=da27380c43165044d0dd6c04da6641520a74c0c4, not stripped

welche ich aber normal mit ./test ausführen kann. Wahrscheinlich hätte ich es nicht mal bemerkt, aber ich wollte mit dem Data Display Debugger arbeiten und der konnte die Datei anscheinend nicht öffnen, da hab ich gesehen, dass es eine shared library ist. Der File-befehl gibt mir folgende Information:

Was bekommst Du denn für einen Fehler?

buzz_lightzyear

(Themenstarter)

Anmeldungsdatum:
8. Juni 2008

Beiträge: 424

Also steh ich jetzt komplett auf der Leitung? Sollten da nicht executables rauskommen?

Wirklich einen Fehler zeigt mir der DDD nicht an aber er sollte ja wenn ich die executable (oder in diesem Fall halt die shared library) auswähle und im gleichen Ordner der source-code ist den Code anzeigen damit ich breakpoints usw. setzen kann. Nachdem er bei mir nichts anzeigt, dachte ich das liegt an der shared library... ^^

Thx & lg buzz

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14347

buzz_lightzyear schrieb:

ich habe heute ein kleines C++ Programm geschrieben. Wenn ich es so (wie immer) mit

g++ main.cpp -o hello

kompiliere, wird mir kein executable erstellt, sondern eine shared libary, ...

Teste mal ob Du mit der "no-pie"-Option kompilieren kannst.

buzz_lightzyear

(Themenstarter)

Anmeldungsdatum:
8. Juni 2008

Beiträge: 424

Hi,

thx mit der no-pie Option bekomm ich ein executable... der DDD zeigt mir aber trotzdem noch nichts an 😀 aber da komm ich dann schon noch drauf. Ich hab schon sehr oft mit gcc kompiliert, aber noch nie die -no-pie option... 😀 Kann mir noch wer verraten, ob ich immer shared libraries erzeugt habe oder doch executables? ^^

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14347

buzz_lightzyear schrieb:

Kann mir noch wer verraten, ob ich immer shared libraries erzeugt habe oder doch executables?

Das wird m. E. davon abhängig gewesen sein, wie die default Konfiguration (d. h. beim Kompilieren) des gcc bzw. des g++ war.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

buzz_lightzyear schrieb:

Kann mir noch wer verraten, ob ich immer shared libraries erzeugt habe oder doch executables? ^^

Du hast immer Executables erzeugt, durch die Verwendung von -pie bzw. ASLR sieht das dann aus wie eine Shared library, siehe z.B. https://blog.fefe.de/?ts=a4888faa.

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6501

Wohnort: Hamburg

Man hat leider vergessen den Dateimanagern Thunar und Caja beizubringen, dass die neuen Dateiformate auch direkt ausführbar sind. In der Konsole kann man sie aber starten. Und -no-pie funktioniert bei mir tadellos.

der DDD zeigt mir aber trotzdem noch nichts an

Du must dem Compiler auch sagen, dass er debug Code erzeugen soll. Das geht mit der Option -g.

Aber Du wirst mit den aktuellen Versionen von DDD und Nemiver nicht sonderlich viel Spaß haben. Die funktionieren nur noch eingeschränkt.Da ist irgentwie die Kommunikation mit dem Debugger kaputt.

Edit: 1 Tippfehler beseitigt

buzz_lightzyear

(Themenstarter)

Anmeldungsdatum:
8. Juni 2008

Beiträge: 424

@Dakuan thx jetzt kann ichs debuggen ☺

Auch thx an alle anderen, hab heute wieder was gelernt... werd mich noch näher in den gcc und g++ einlesen ☺

Schönen Abend noch & Lg buzz

Antworten |