Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Erstelltes Linux Programm auf unterschiedlichen Distributionen (https://www.delphipraxis.net/155326-erstelltes-linux-programm-auf-unterschiedlichen-distributionen.html)

RWarnecke 19. Okt 2010 07:20

Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hallo zusammen,

da ich noch nicht so erfahren bin, was die Erstellung von Programmen unter Linux angeht, habe ich gestern einfach mal ein Programm unter OpenSuse 11.2 mit Lazarus erstellt. Hier funktioniert das Programm einwandfrei. Da ich noch einen zweiten Rechner mit Ubuntu 10.04.1 habe, habe ich die Datei von OpenSuse 11.2 nach Ubuntu 10.04.1 kopiert und wollte es hier ausführen. Nur leider hat das nicht funktioniert. Es gab keinerlei Fehlermeldung oder sonstige Hinweise.

Dazu meine Fragen :
  1. Muss ich für jede Distri das Programm immer neu kompilieren ?
  2. Was muss ich beachten, wenn ich ein Programm für mehrere Distributionen bereitstellen will ?
  3. Was habe ich falsch gemacht, dass mein kleines Programm unter OpenSuse 11.2 funktioniert und unter Ubuntu 10.04.1 nicht ?

franktron 19. Okt 2010 09:05

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Das hat was mit der GCC Lib zu tun.

Leider habe ich gerade nix gefunden wie man mit Lazarus eine bin Static Kompilieren kann.

RWarnecke 19. Okt 2010 09:34

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Zitat:

Zitat von franktron (Beitrag 1056420)
Das hat was mit der GCC Lib zu tun.

Leider habe ich gerade nix gefunden wie man mit Lazarus eine bin Static Kompilieren kann.

Aha, und wie läuft das genau ?

franktron 19. Okt 2010 09:39

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Also mit C Programmen kann man die bin als Static also alle libs in die bin Linken oder Dynamic Kompilieren, ich wies aber nicht wie das mit Lazarus geht habs zwar mal gemacht aber weis nicht mehr wie.

wicht 19. Okt 2010 09:50

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Zitat:

Nur leider hat das nicht funktioniert. Es gab keinerlei Fehlermeldung oder sonstige Hinweise.
Hast du es mal von der Shell aus ausgeführt? Da muss doch eigentlich irgendein Text rauskommen als Meldung..?

RWarnecke 19. Okt 2010 12:52

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Das wäre noch eine Idee, werde ich heute Abend ausprobieren. Muss da auch Text ausgegeben werden, wenn es sich um eine Anwendung mit einer Form handelt. Es ist keine Konsolenanwendung.

wicht 19. Okt 2010 12:57

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Muss nicht, ist aber oft so.

RWarnecke 19. Okt 2010 16:50

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Ich habe jetzt mal das Programm in der Konsole unter Ubuntu ausprobiert :
Code:
./project1
Fehlermeldung : No such File or directory
Code:
project1
Der Befehl wurde nicht gefunden.

Jetzt die große Frage, gebe ich den ersten Befehl auf meinem OpenSuse Rechner funktionierts einwandfrei.

Klaus01 19. Okt 2010 16:51

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hast Du due Datei ausführbar gemacht?
Mit dem Hammer -> chmod 777 project1

Grüße
Klaus

Valle 19. Okt 2010 17:03

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hallo,

wenn die Datei nicht ausführbar wäre, dann würde eine anderen Fehlermeldung kommen. Du musst auch mit "cd" in das Verzeichnis gehen, in dem sich die Datei befindet. mit "pwd" kannst du dir anzeigen lassen, wo du aktuell bist.

@chmod 777: Mach das nicht un vergiss es auch schnell wieder. Wenn du die Datei ausführbar machen willst (und das musst du um sie auszuführen), dann benutze das Kommando chmod +x <file>.

Liebe Grüße,
Valle

RWarnecke 19. Okt 2010 19:10

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hallo zusammen,

danke für eure Antworten. Ich bin schon im richtigen Verzeichnis. Ich habe es mit chmod 777 und auch mit chmod +x ausprobiert. Auf Ubuntu 10.04.1 will das Programm einfach nicht starten. Es gibt weiterhin keine Fehlermeldungen, wenn ich es aus der grafischen Oberfläche starte. Irgendwie muss noch etwas installiert werden, damit das Programm funktioniert, aber was ? So ist zumindest meine Vermutung.

Klaus01 19. Okt 2010 21:02

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Guten Abend Rolf,

vielleicht bekommst Du ja erste Hinweise, wenn Du Dein Programm
als Parameter von strace startest.

.. oder mal den GNU Debugger gdb verwenden.

Code:
strace project1
Grüße
Klaus

RWarnecke 20. Okt 2010 05:25

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Klaus,

ich habe mal den Befehl strace ausgeführt und die Meldungen im Anhang 1 erhalten. Im Anhang 2 sind die Rechte angezeigt für die beiden Dateien. Vielleicht kannst Du ja damit etwas anfangen. Ich kann es nicht. Es ist immer noch das gleiche Programm, ich habe es nur umbenannt nach FirebirdConnect. Das Programm AMSServer ist nochmal ein zweites Kompiliertes Programm mit Lazarus unter OpenSuse 11.2.

Edit: Wenn ich die Programme auf einem SLES 10 ausführe, funktionieren die Programme wunderbar.

franktron 20. Okt 2010 09:35

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Da fehlt irgendeine Lib wahrscheinlich die für Firebird würde ich mal glauben

Valle 20. Okt 2010 17:27

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hallo,

dir fehlt keine Lib, zumindest ist das nicht ersichtlich. Strace sagt das gleiche wie Bash vorher auch gesagt hat: Es kann die Datei, die du ausführen möchtest nicht finden.

Interessant ist jetzt, dass du offensichtlich im gleichen Verzeichnis bist, aber das Programm dennoch nicht gefunden wird. Im Momemt fällt mir nur ein, dass du mal versuchen könntest, einen absoluten Pfad zum Programm anzugeben:

Code:
/media/filme/Test/FirebirdConnect
Liebe Grüße,
Valle

SirThornberry 20. Okt 2010 17:50

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
meine Vermutung ist das hier groß und Kleinschreibung einfach nicht stimmt. Hast du den Programmnamen selbst in der Shell eingetippt oder wurde dieser durch die bash-completion vervollständigt?

DeddyH 20. Okt 2010 18:22

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Laut Screenshots stimmt aber die Groß- und Kleinschreibung.

Klaus01 20. Okt 2010 20:51

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
.. ein Schuss ins Blaue

Ist auf der Ubuntubox SELinux installiert und ist es aktiv?
Mit sestatus kannst Du das herausbekommen.

Wenn es aktiv ist würde ich es erst einmal testweise
deaktivieren.
Wenn Dein Programm dann läuft, kann man hergehen und SELinux
entsprechend konfigurieren.

Grüße
Klaus

Bernerbaer 20. Okt 2010 21:18

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Zitat:

Zitat von Klaus01 (Beitrag 1056810)
..
Ist auf der Ubuntubox SELinux installiert und ist es aktiv?
Mit sestatus kannst Du das herausbekommen.
....

Bei ubuntu denke ich eher an AppArmor als an SELinux

RWarnecke 21. Okt 2010 04:37

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Guten Morgen zusammen,

danke erstmal für die vielen Antworten. Nun zu den einzelnen Vorschlägen :
Zitat:

Zitat von Klaus01 (Beitrag 1056810)
Ist auf der Ubuntubox SELinux installiert und ist es aktiv? Mit sestatus kannst Du das herausbekommen.

Den Befehl setstatus kennt er nicht. Damit wäre auch SELinux auf Ubuntu nicht installiert.
Zitat:

Zitat von Bernerbaer (Beitrag 1056811)
Bei ubuntu denke ich eher an AppArmor als an SELinux

Der Befehl apparmor_status bringt mir folgendes Ergebnis :
Zitat:

apparmor module is loaded.
10 profiles are loaded.
10 profiles are in enforce mode.
/sbin/dhclient3
/usr/bin/evince
/usr/bin/evince-previewer
/usr/bin/evince-thumbnailer
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/connman/scripts/dhclient-script
/usr/lib/cups/backend/cups-pdf
/usr/sbin/cupsd
/usr/sbin/tcpdump
/usr/share/gdm/guest-session/Xsession
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode :
/usr/sbin/cupsd (1453)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Das sagt mir ja, dass das Modul appamor geladen ist. Nur leider finde ich das Modul mit lsmod nicht. Da kommt bei mir die Frage auf, warum soll mir da Appamor das starten des Programms verhindern ?

Bernerbaer 21. Okt 2010 10:49

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Ich kenne mich mit Linux nur begrenzt aus, ob und wie AppArmor da verantwortlich ist für dein Problem kann ich nur schwer beurteilen. Da ich aber, wenn ich schon Linux verwende, Ubuntu einsetze, konnte ich fast automatisch SELinux ausschliessen.
Stoppe doch einfach mal Apparmor mit
Code:
sudo /etc/init.d/apparmor stop
und prüfe ob dein Programm danach funktioniert. Neustarten kannst du dann AppArmor mit
Code:
sudo /etc/init.d/apparmor start
Sollte AppArmor verantwortlich sein für dein Problem findest du hier weitere Informationen

creed steiger 21. Okt 2010 16:58

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hört sich stark nach einem 32/64 bit Problem an.

was zeigt den ls -l project1
oder file project1 an?

RWarnecke 21. Okt 2010 17:16

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Zitat:

Zitat von creed steiger (Beitrag 1057004)
Hört sich stark nach einem 32/64 bit Problem an.

was zeigt den ls -l project1
oder file project1 an?

Hallo Creed,

ich glaube Du hast ins Schwarze getroffen. Wenn ich die Ausgabe von file FirebirdConnect richtig deute :
Zitat:

FirebirdConnect: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Liege ich mit meiner Aussage richtig ?

creed steiger 22. Okt 2010 14:40

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Wenn du die 32 bit binary mit einer 64 bit Distro probiert hast schon.

Ich denk für Ubuntu gibts 32 bit compat Pakete,die könnten evtl helfen.

RWarnecke 22. Okt 2010 15:51

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Ok, dann verstehe ich aber nicht, warum das 32Bit Programm, entwickelt auf OpenSuse 11.2 32Bit, auf einem SLES10 64Bit funktioniert und bei einem 64Bit Ubuntu nicht. Dann fehlen da doch noch Libraries oder sehe ich das falsch ?

Valle 22. Okt 2010 16:05

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Es kann nicht an der Bitzahl liegen. Linux würde sich schon aussagekräftig darüber beschweren, wenn eine ELF-Datei unter dem aktuellem Kernel nicht läuft.

Code:
valentin@orion:~$ ./some64app
bash: ./some64app: cannot execute binary file
Auch Sicherheitssoftware wie AppArmor oder SELinux kann niht schuld sein. Diese würden eine "Zugriff verweigert"-Meldung erzeugen, aber kein "Datei nicht gefunden". Andernfalls würde es sich um einen schweren Bug handeln!

Hast du es denn mal über die Angabe des absoluten Pfades probiert? Versuche auch, dabei die Auto-Vervollständigung über die Tabulator-Taste zu nutzen, um Tippfehler auszuschließen. Eventuell könnte es hilfreich sein, die Datei erneut zu übertragen oder umzubenennen, um Fehler im Dateinamen auszuschließen.

Liebe Grüße,
Valle

creed steiger 22. Okt 2010 16:39

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
https://answers.launchpad.net/ubuntu/+question/13367

Auf dem SLES ist wohl compat-32-bit mit dabei.

RWarnecke 24. Okt 2010 08:35

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Hallo creed,

nachdem ich das Paket ia32 installiert hatte funktionierte meine Anwendung hervorragend. Danke Dir für diesen Tipp.

Gruß
Rolf

SirThornberry 24. Okt 2010 09:14

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Das würde ich dann aber auch schon fast zu den schwerwiegenderen Fehlern zählen das als Fehlermeldung kommt das die Datei nicht gefunden wurde.

creed steiger 24. Okt 2010 13:26

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
http://www.markusbe.com/2009/09/abou...red-libraries/

erklärt ein bissl was dazu

Assarbad 24. Okt 2010 15:15

AW: Erstelltes Linux Programm auf unterschiedlichen Distributionen
 
Zitat:

Zitat von franktron (Beitrag 1056429)
Also mit C Programmen kann man die bin als Static also alle libs in die bin Linken oder Dynamic Kompilieren, ich wies aber nicht wie das mit Lazarus geht habs zwar mal gemacht aber weis nicht mehr wie.

Sorry, daß ich hier den Wind aus den Segeln nehmen muß, aber leider ist dies nicht der Fall.

Einige Bibliotheken, wie bspw. NSS, lassen sich partout nicht statisch linken. Dazu bedarf es offenbar einiger Zaubertricks - und um das hinzubekommen arbeite ich mit meinem Team schon eine Weile an einer Lösung.

Magic Ermine und Statifier sind nur bedingt einsetzbar. Speziell Magic Ermine macht die Binaries sehr sehr groß. Dafür hat man aber den Vorteil, daß es auch auf verschiedenen Kernels funktioniert. Je nach Kernel unterscheidet sich nämlich die ABI. Beim aktuellen 2.6er geht die Kompatibilität bis 2.6.16 zurück, wenn ich mich recht entsinne. Beim 2.4er braucht man ggf. andere Binaries.

In Ubuntu 10.04 wurden bspw. einige Funktionen entfernt, die vorher drin waren. Und schon hatten wir mit F-PROT Probleme. Eine zwischenzeitliche Lösung hat sich ergeben, aber das Gelbe vom Ei ist sie nicht.

Nachtrag: unser derzeitiger Lösungsansatz ist es die C-Library von einem der BSDs zu portieren und zu benutzen. Der ganze Spaß hat durchaus etwas mit den wunderbaren Verärgerungen auf dieser Seite zu tun ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz