• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Linux Mint] Selbst compilierte Binary wird nicht ausgeführt

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
Hallo zusammen.

Ich wende mich heute mit einem recht kuriosen Problem unter Linux an euch. Ich nutze Linux Mint 19.1 Tessa MATE, soweit ich das beurteilen kann :D

Ich habe unter Code::Blocks in C++ einen Bot für das Spiel 4 Gewinnt geschrieben. Als Compiler nutze ich GNU GCC. Das Ausführen der Binary aus der IDE heraus (über Strg+F10) funktioniert problemlos. Ebenso kann ein Bekannter von mir unter Arch Linux die Binary bei sich ausführen. Wenn ich allerdings im Speicherordner die Datei markiere und Enter drücke (oder doppelklicke), passiert einfach genau nichts. Versuche ich die Datei im Terminal zu öffnen, passiert folgendes:

shell.png

Die Berechtigungen der Datei sehen wie folgt aus:

Die Datei ist also (wohl bereits von der IDE) als ausführbar markiert. Ein erneutes Ausführen von chmod +x bringt allerdings auch keinen Unterschied.

Hat vielleicht jemand eine Ahnung, woran das liegen könnte? :unknown: Es wäre doch schade, wenn ich weiterhin meine eigenen Programme nur aus der IDE heraus ausführen könnte...
 
Zuletzt bearbeitet:

Metal_Warrior

Defender of Freedom
Teammitglied

Registriert
10 Aug. 2013
Beiträge
6.830
Ort
/dev/mapper/home
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

@Kenobi van Gin: Probier mal

./4wins\ Bot

Leerzeichen in Dateinamen müssen im Terminal auskommentiert werden, sonst wird der zweite Namensteil als Parameter für die Datei mit dem Namen 4wins interpretiert, die es ja nicht gibt. Ob die Anführungszeichen das richtig machen, bin ich mir grad nicht sicher, kann es aber grad auch nicht testen.
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #3
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

Kann das gerne nochmal testen. Hatte allerdings nach einem Hinweis, der in eine ähnliche Richtung ging, auch schonmal einfach die Leerstelle aus dem Namen rausgenommen. Das hatte jedenfalls nichts gebracht.

[EDIT:]
Nope, weder das Auskommentieren bringt etwas, noch das Ersetzen der Leerstelle durch einen Unterstrich.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

@Kenobi van Gin: Normalerweise muss man Leerzeichen escapen wenn man nicht mit Anführungszeichen arbeitet.

Also versuch es mal mit: [kw]./4wins\ Bot[/kw]

Der Schrägstrich plus Leerzeichen sagen das im Namen ein Leerzeichen nach dem [kw]\[/kw] gibt, welches es zu escapen gilt.

Ach ja, und weil du etwas ausführen willst:
[kw]chmod +x 4wins\ Bot[/kw]

Das sagt das die Datei, zusätzlich, ausführbar sein soll. Dann sollte auch das Autocomplete greifen wenn du [kw]./[/kw] vorwegsetzt.
 
Zuletzt bearbeitet:

Metal_Warrior

Defender of Freedom
Teammitglied

Registriert
10 Aug. 2013
Beiträge
6.830
Ort
/dev/mapper/home
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

@Kenobi van Gin: Dann würde es mich interessieren, was dein Kumpel unter Arch so macht, dass es läuft.

Compilest du die Datei auch auf dem Rechner, auf dem du sie am Ende ausführen willst? Wenn nicht, fehlen dir eventuell Libraries... Aber jetzt fang ich echt an zu spekulieren...
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

Probier mal [kw]ldd ./4wins\ Bot[/kw] - das zeigt dir an, welche Dateien zum Ausführen deiner Binary zusätzlich benötigt werden (dynamische Libraries und Linker). Vielleicht fehlt da was?
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #8
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

@theSplit:
@Laui: Wie schon weiter oben angemerkt, habe ich beides schon ausprobiert. Ich habe das Leerzeichen escapet, ich habe den Pfad in Anführungsstriche gesetzt und ich habe das Leerzeichen durch einen Unterstrich ersetzt. Leider hat nichts davon ein anderes Ergebnis gebracht.

@Metal_Warrior: Ich habe die Datei auch auf dem selben Rechner compiliert. Mein Bekannter hat, soweit ich weiß, nur chmod +x ausgeführt, aber auch das schafft ja bei mir keine Abhilfe.

@Rakorium-M: Okay, das könnte ich nochmal checken. Dürfte ja eigentlich nicht, weil es wie gesagt auf der selben Maschine compiliert wurde, aber vllt komme ich morgen mal dazu, das zu testen.
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #9
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

Also ldd gibt bei mir folgendes aus:


Any thoughts?

Ich hänge außerdem einfach mal die Binary an. Falls sich wer traut, könnt ihr damit gern experimentieren :cool:
 

Anhänge

  • 4winsBot.tar.gz
    19,8 KB · Aufrufe: 536

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

Ich kann das Problem nachvollziehen (Linux Mint 19.1 Cinnamon). Anscheinend setzt dein Compiler einen falschen Loader-Pfad:
[src=bash]
# Versuch 1:
> ./4winsBot
bash: ./4winsBot: No such file or directory
# bash versucht hier die Binary zu laden, indem sie an den dynamischen Linker übergeben wird (ld-linux).

# mal genauer schauen, welcher Loader verlangt wird:
> readelf -l 4winsBot

Elf file type is EXEC (Executable file)
Entry point 0x4027c0
There are 9 program headers, starting at offset 64

Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
0x00000000000001f8 0x00000000000001f8 R E 0x8
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001a 0x000000000000001a R 0x1
[Requesting program interpreter: /lib/ld-linux-x86-64.so.2] # <-- die interessante Zeile, das hier ist der geforderte Linker
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x000000000000b93e 0x000000000000b93e R E 0x200000
LOAD 0x000000000000bdd0 0x000000000060bdd0 0x000000000060bdd0
0x00000000000003ae 0x00000000000008f8 RW 0x200000
DYNAMIC 0x000000000000bdf0 0x000000000060bdf0 0x000000000060bdf0
0x0000000000000200 0x0000000000000200 RW 0x8
NOTE 0x0000000000000254 0x0000000000400254 0x0000000000400254
0x0000000000000044 0x0000000000000044 R 0x4
GNU_EH_FRAME 0x000000000000ac60 0x000000000040ac60 0x000000000040ac60
0x0000000000000104 0x0000000000000104 R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
GNU_RELRO 0x000000000000bdd0 0x000000000060bdd0 0x000000000060bdd0
0x0000000000000230 0x0000000000000230 R 0x1

Section to Segment mapping:
Segment Sections...
00
01 .interp
02 .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame .gcc_except_table
03 .init_array .fini_array .jcr .dynamic .got .got.plt .data .bss
04 .dynamic
05 .note.ABI-tag .note.gnu.build-id
06 .eh_frame_hdr
07
08 .init_array .fini_array .jcr .dynamic .got

# gibt's den überhaupt?
> ls /lib/ld-linux-x86-64.so.2
ls: cannot access '/lib/ld-linux-x86-64.so.2': No such file or directory
# => nein.

# Gegentest: manuell den Loader angeben:
> /lib64/ld-linux-x86-64.so.2 ./4winsBot
# => funktioniert.
[/src]
Vielleicht hat das Arch deines Kumpels zufällig den Linker unter dieser Adresse liegen, Standard ist das mWn nicht.
Warum die IDE so nen Blödsinn macht kann ich dir nicht sagen, ich nutze selber CLion. Erzeugt Code::Blocks zufällig ein Makefile oder besser CMake-Projekt, das man manuell compilieren könnte?

Gruß
Rakorium
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #11
Re: [Linux Mint] Selbst compilierte binary wird nicht ausgeführt

Ich kann das Problem nachvollziehen (Linux Mint 19.1 Cinnamon). Anscheinend setzt dein Compiler einen falschen Loader-Pfad:
[src=bash]Blablabla ist für mich alles Bahnhof, da kann ich also nichts zu sagen :D
[/src]
Erzeugt Code::Blocks zufällig ein Makefile oder besser CMake-Projekt, das man manuell compilieren könnte?

Mhm. Ich kann mal gucken :unknown: Also müsste ich wenn in den Linker-Einstellungen was ändern?

[EDIT:]
Hier mal die Properties des Projekts:
 
Zuletzt bearbeitet:

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Sry falls zu viele Details. Zusammengefasst: Code::Blocks baut Mist, Loader/Linker heißt das was er falsch setzt, und übergangsweise kannst du die Datei mit "[kw]/lib64/ld-linux-x86-64.so.2 ./4winsBot[/kw]" ausführen.

Würde mich mal interessieren was da unter "Project Build Options" steht - taucht dort irgendwo was mit [kw]ld-linux-*.so.*[/kw] auf?
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #13
Ne, ist schon okay, dass du viele Details lieferst. Ich lern ja auch gern dazu, und vielleicht kann jemand anderes was damit anfangen.
Das Fenster von Project Build Options sieht so aus:


Soweit ich das sehe, steht auch unter den anderen Tabs nichts von der von dir genannten library (?).

Wenn ich die lib voranstelle, funktioniert das Ausführen schonmal *whoop whoop*. Hast du zufällig auch noch eine Idee, wie ich das ohne Workaround hinkriege? :D
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
@Kenobi van Gin: Versuch mal "statisch" zu linken.

Ich hab nur das hier dazu gefunden: Klick

NAME

ld.so, ld-linux.so - dynamic linker/loader

SYNOPSIS

The dynamic linker can be run either indirectly by running some
dynamically linked program or shared object (in which case no
command-line options to the dynamic linker can be passed and, in the
ELF case, the dynamic linker which is stored in the .interp section
of the program is executed) or directly by running:

/lib/ld-linux.so.* [OPTIONS] [PROGRAM [ARGUMENTS]]

DESCRIPTION

The programs ld.so and ld-linux.so* find and load the shared objects
(shared libraries) needed by a program, prepare the program to run,
and then run it.

Linux binaries require dynamic linking (linking at run time) unless
the -static option was given to ld(1) during compilation

Wenn ich richtig lese bedeuet das (letzter Absatz) du mußt "statisch linken" - mit "-static" Option für "ld" bzw. in den "Compiler Settings".

Screenshot aus deinem herausgelöst, hier die Option "-static":




Hier noch ein Reading dazu, was aber relativ komplex beschrieben ist:
https://lwn.net/Articles/631631/

Dynamically linked programs

So far we've assumed the program being executed is statically linked and skipped over steps that would be triggered by the presence of a PT_INTERP entry in the ELF program header. However, most programs are dynamically linked, meaning that required shared libraries have to be located and linked at run-time. This is performed by the runtime linker (typically something like /lib64/ld-linux-x86-64.so.2), and the identity of this linker is specified by the PT_INTERP program header entry.
 
Zuletzt bearbeitet:

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #15
Wenn ich richtig lese bedeuet das (letzter Absatz) du mußt "statisch linken" - mit "-static" Option für "ld" bzw. in den "Compiler Settings".

Ja, der Eintrag war mir auch schon aufgefallen. War mir aber nicht sicher, ob das was damit zu tun hat. Das Setzen der Flag Static linking macht den Unterschied. Habe damit eben das Programm neu compiliert und kann es jetzt im Terminal ausführen. Danke schonmal dafür :T
Jetzt ist natürlich die Datei mit 1,63 MB zu vorher um die 50 KB auch deutlich größer. Ist ja logisch. Aber ich dachte, dass eben gerade bei Linux die Librarys eigentlich lokal vorliegen und deshalb nicht mit eincompiliert werden müssen? Wie kommt es also, dass offenbar Linux Mint die benötigte Standardlibrary nicht default mit installiert hat?

Nebenbei bemerkt kann ich die Datei immer noch nicht per Doppelklick ausführen. Das stört mich nicht weiter, im Terminal reicht mir. Oder ist das bei Linux sowieso nicht üblich, dass beim Doppelklick einfach das System von sich aus ein Terminal öffnet? Bei Batch-Dateien oder auch exe-Dateien für die Konsole unter Windows passiert das ja automatisch.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
@Kenobi van Gin: Das mit dem Doppelklick kann ich dir nicht erklären

Was du machen kannst, erstelle dir einen Starter für die Anwendung. Ich habe hier nur Xfce4, daher weiß ich nicht wie das Mint geht.

Aber wenn ich einen Starter anlege, mit dem Arbeitsverzeichnis für die Anwendung und mit entsprechenden Befehl klappt es. Befehl zum Starten einer Anwendung, im Terminal, wäre dann das [kw]./pathToFile[kw] zum ausführen, dann startet auch die Anwendung direkt im Terminal.

Es sei aber anzumerken, du musst mittels [kw]chmod +x[/kw] als Executable setzen, sonst erlaubt das OS nicht die Datei auszuführen.

Edit: Mal anders gefragt, welches Desktop verwendest du?
Bei Xfce4 geht das relativ einfach.
 
Zuletzt bearbeitet:

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #17
@theSplit: Jo, danke, die Starter kenne ich. Ist für diese Executable im Speziellen auch ziemlich latz, da brauche ich das eh nicht. Hatte schon überlegt, ob das wohl damit zusammenhängt, dass das Ding keine Dateiendung hat und das OS darum nicht weiß, womit es die Datei öffnen soll. Vielleicht sähe die Sache anders aus, wenn ich als Standardanwendung für Dateien ohne Endung das Terminal setze. Ist aber wie gesagt in dem Fall auch egal.

Ich glaube ich habe den MATE-Desktop. Macht das Sinn? Bin ziemlich neu bei Linux :unknown:
Jo, Homepage von Mint sagt, dass es der MATE-Desktop ist. Habe auch in anderem Zusammenhang schon ein paar Starter erstellt. Das wäre also für den Fall nicht das Problem ;)
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
@Kenobi van Gin: Du hast mit deiner Vermutung nicht unrecht, im Grunde weiß das OS nicht wie es die Datei interpretieren soll. Daher auch das: "./ProgrammStarten und das setzen des Executable Flags mittels "chmod +x".

Allerdings kann ich dazu keine qualifizierte(re) Antwort geben.
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Die "Anwendung", mit der das OS Programme (unabhängig von der Dateiendung) öffnen will, ist üblichweise genau der dynamische Linker [kw]ld-linux.so[/kw], der bei dir Probleme macht. So wie "bash" Shell-Scripte ausführt und "python" Python-Code, so führt ld-linux eben ELF-Dateien aus (ELF = exe für Linux).
Ich bekomme gerade das Gefühl, dass an deinem System etwas mehr kaputt ist als nur die Code::Blocks-Toolchain. Kannst du mal den Output von [kw]ldd /bin/sh[/kw] posten? Oder hast du mal was an Kernel oder glibc von deinem System geändert?
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
  • Thread Starter Thread Starter
  • #20
(Bewusst) geändert habe ich da nix. Die Installation ist auch noch nicht besonders alt. Ich hatte allerdings ursprünglich mal eine andere Code::Blocks-Version drauf, habe die dann wieder deinstalliert und eine aktuellere aus einem anderen Repository (oder so?) installiert. Vielleicht ist dabei was schief gegangen :unknown:

Ausgabe von ldd:


Ist das das, was dort stehen sollte? Bzw. falls nicht, was ist denn falsch?
 
Oben