2016-04-22 10 views
0

Ich habe 2 MIPS Router openwrt Linux ausgeführt. Auf einem davon ist alles in Ordnung und ich kann meine App problemlos von der Konsole aus starten. ich es über scp kopieren (dies ist mein app, eine Datei) an einem anderen Router und wenn ich versuche, es zu laufen, bekomme ich Fehler „nicht gefunden“:Kann nicht C++ App von Linux-Konsole ausführen - "nicht gefunden" Fehler

[email protected]:~# pwd 
/root 
[email protected]:~# ls -l 
-rwxr-x--- 1 root  root  132001 Apr 2 17:37 app 
[email protected]:~# ./app 
ash: ./app: not found 
[email protected]:~# uname -a 
Linux OpenWrt 3.7.9 #3 Mon Aug 5 16:25:53 EEST 2013 mips GNU/Linux 

ich nicht ein Neuling in Linux bin, aber kann nicht finden, was das Problem hier ist.

+0

Ich bin mir nicht sicher, aber etwas sagt mir, dass dies mit fehlenden Abhängigkeiten zu tun hat. Vielleicht kann der Linker eine bestimmte Abhängigkeit nicht finden, die auf Router 1 vorhanden ist, aber nicht auf Router 2. Versuchen Sie, die Binärdatei auf der Zielplattform neu zu kompilieren. – jDo

+0

können Sie "Datei ./app" ausführen, um zu überprüfen, ob es tatsächlich eine ausführbare Datei ist –

+0

@jDo Vielleicht fehlen Abhängigkeiten. Das ist sicher möglich. Aber ich habe nicht erwartet, dass der Fehler "Nicht gefunden" hier nicht angezeigt wird. Ich habe keine IDD auf der Zielplattform, daher kann ich nicht überprüfen, welche Abhängigkeiten fehlen. Hast du irgendwelche Vorschläge wie es geht? – rightaway717

Antwort

1

Ich bin sicher kein Compiler-Experte aber aus bitterer Erfahrung, wenn Binärdateien um auf Embedded-Systemen, diese kryptischen Fehler führen mich zu bewegen, zu glauben, dass es eine Art ist von Abhängigkeitsfehler; wahrscheinlich ein fehlender Linker. Die Neukompilierung der Binärdatei auf dem Zielsystem hat das Problem für mich in der Vergangenheit gelöst.

Wie Kevin Vasko in den Kommentaren gefragt: "können Sie LDD./App auf es ausführen?"

Dies ist ein guter Weg zu bestimmen, welche Bibliotheken und Linker das Programm erwartet. Man kann auch vorgeschlagen tun, wie in this answer, die ein ähnliches Problem zeigt, und führen Sie den folgenden Befehl nur die „Programm-Interpreter“ Linie zu bekommen (ldd mehrere Abhängigkeiten zeigen):

readelf -l app | grep "program interpreter"

Auf meinem System, das zeigt, der GNU-Linker, ld, aber mit einer erläuternden Textzeile, die hilfreich sein könnte [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2].

Also, ich vermute, dass, wenn ich diesen "Programm-Interpreter" aus meinem System entfernen würde, würde ich den gleichen Fehler (und wahrscheinlich einige andere). Versuchen Sie erneut, die Binärdatei auf dem Zielsystem neu zu kompilieren oder fehlende Abhängigkeiten manuell zu erfüllen, indem Sie die richtigen Dateien an die richtigen Stellen verschieben.

+0

Vielen Dank für Ihre Hilfe. Ich habe keine ldd oder readelf auf Zielsystem, aber ich habe sie auf dem funktionierenden Router, also überprüfte ich die Abhängigkeiten dort, kopierte fehlende auf den Zielrouter und es funktionierte. – rightaway717

+0

Gern geschehen. Froh, dass es funktioniert hat! :) – jDo

0

Innerhalb Ihrer ./app habe ich das Gefühl, dass Sie etwas anrufen, das nicht existiert. In diesem Fall das "Ash" -Befehl.

zu diesem Fehler Basierend

ash: ./app: not found 

Ich glaube, Sie sind in Ihrer ./app ein Stück Code ausgeführt wird. Basierend auf der "Asche" würde ich sagen, dass Sie versuchen, "bash" zu betreiben. Wenn ich raten müsste vertippt Sie Ihre Header in Ihrem Skript

#!/bin/bash 
+0

Nein, tut mir leid, das ist eine C++ App tatsächlich. keine Schale hier – rightaway717

+0

@ rightaway717 Ah, tust du irgendetwas mit der "Asche" Schale? –

+0

Nein, nichts außer dass ich versuche, die App darin zu starten. Ich habe auch versucht, es aus der Ebene 'sh' – rightaway717