[Xamarin / Visual Studio for Mac] Console Binary lässt sich nur mit ./ starten

stonefred

Aktives Mitglied
Thread Starter
Dabei seit
20.11.2007
Beiträge
10.764
Reaktionspunkte
8.543
Hallo Programmierer,

ich habe heute zum ersten Mal mit Xamarin gespielt und einen C# code als Consoleapp compiliert und gespeichert. Das Programm liegt in einem Ordner und ist ausführbar, trotzdem kann ich es aus der Konsole nicht in dem Ordner starten, in dem es liegt. Mit ./programmname funktioniert es einwandfrei.

Code:
> cd testverzeichnis
> ls -la testprogramm
-rwxr-xr-x  1 stonefred  staff  80860 24 Nov 10:15 testprogramm
> testprogramm
-bash: testprogramm: command not found
>./tesptrogramm

Hello World!

>

Wie kann ich das Binary ohne ./ ausführbar machen?
 
es musst sonst im PATH liegen.
aber ./ steht für das aktuelle verzeichnis.
sonst du es mit vollem pfad ausführen.
/pfad/zu/binary.

wenn das nicht ständig machen willst, dann füge den ordner halt PATH hinzu.
entweder über /etc/paths oder es noch die /etc/paths.d, da kann man dann pro eintrag eine datei anlegen und benennen, damit man bessere übersicht hat.
alternativ kannst auch ein alias in shell rc datei machen.
 
  • Gefällt mir
Reaktionen: ruerueka
es musst sonst im PATH liegen.
aber ./ steht für das aktuelle verzeichnis.
sonst du es mit vollem pfad ausführen.
/pfad/zu/binary.
Code:
> pwd
/Users/stonefred/Desktop/testverzeichnis
> /Users/stonefred/Desktop/testverzeichnis/testprogramm

Hello World!

>
das hat funktioniert.

es musst sonst im PATH liegen.wenn das nicht ständig machen willst, dann füge den ordner halt PATH hinzu.
entweder über /etc/paths oder es noch die /etc/paths.d, da kann man dann pro eintrag eine datei anlegen und benennen, damit man bessere übersicht hat.
alternativ kannst auch ein alias in shell rc datei machen.
Hmm, von Linux habe ich die Erfahrung, dass ein Binary wenn es mit chmod +x ausführbar gemacht worden ist kein ./ braucht. Und wenn man mit der Shell im selben Verzeichnis ist, dann braucht man auch keine Path-Variablen oder das Binary in einen bekannten Path ablegen... :confused:
 
Hmm, von Linux habe ich die Erfahrung, dass ein Binary wenn es mit chmod +x ausführbar gemacht worden ist kein ./ braucht. Und wenn man mit der Shell im selben Verzeichnis ist, dann braucht man auch keine Path-Variablen oder das Binary in einen bekannten Path ablegen... :confused:

uh, da hat dann aber jemand . in PATH gemacht, was nicht so beste idee ist.
 
  • Gefällt mir
Reaktionen: ruerueka und stonefred
Es ist also kein C#/Xamarin-Problem, sondern OP braucht noch etwas POSIX/Shell-Verständnis: https://askubuntu.com/a/168584
Ist das echt wahr?

Ich habe übrigens gerade gemerkt, dass ich 3 Dateien habe.
testrogramm
testprogramm.dll
testprogramm.pdb

wenn ich die 3 Dateien in ein anderes Verzeichnis kopiere, dann funktioniert es auch mit ./ nicht mehr
Code:
> cd /Users/stonefred/Desktop/testverzeichnis
> mkdir test
> cp testprogramm test/
> cp testprogramm.dll test/
> cp testprogramm.pdb test/
> cd test
> ./testprogramm
A fatal error was encountered. The library 'libhostpolicy.dylib' required to execute the application was not found in '/usr/local/share/dotnet'.

alles nicht so einfach, wie gedacht. :)
 
wenn ich die 3 Dateien in ein anderes Verzeichnis kopiere, dann funktioniert es auch mit ./ nicht mehr
alles nicht so einfach, wie gedacht. :)

das binary ist halt gegen eine lib gelinkt, die dann nicht gefunden wird.
musst du halt statisch linken, falls das geht.
 
  • Gefällt mir
Reaktionen: dg2rbf und ruerueka
OK. Vielen Dank.

Für den ersten Versuch war ich noch relativ erfolgreich. Ich habe mehrere 4 Jahre alte Windows-C#-Klassen auf dem Mac kompiliert, debugged und mit eigener Mainroutine zum Laufen gebracht. Aber insgesamt ist mir das Xamarin immer noch zu sehr eine Bastelei. Das Binary würde ohne das .dotnet Framework also nicht funktionieren... das gefällt mir gar nicht.

Ich werde mir nochmal XCode ansehen und wenn ich total versage wieder zu meinen Scripten zurückkehren.
 
Ist das echt wahr?
[..]
A fatal error was encountered. The library 'libhostpolicy.dylib' required to execute the application was not found in '/usr/local/share/dotnet'.[/CODE]

alles nicht so einfach, wie gedacht. :)

https://natemcmaster.com/blog/2017/12/21/netcore-primitives/#runtimeconfigjson
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build


OK. Vielen Dank.
Das Binary würde ohne das .dotnet Framework also nicht funktionieren... das gefällt mir gar nicht.

Ich werde mir nochmal XCode ansehen und wenn ich total versage wieder zu meinen Scripten zurückkehren.

Siehe 2ter Punkt: https://docs.microsoft.com/en-us/dotnet/core/deploying/index

https://docs.microsoft.com/en-us/dotnet/core/deploying/index schrieb:
.NET Core application deployment


Self-contained deployment. Unlike FDD, a self-contained deployment (SCD) doesn't rely on the presence of shared components on the target system. All components, including both the .NET Core libraries and the .NET Core runtime, are included with the application and are isolated from other .NET Core applications. SCDs include an executable (such as app.exe on Windows platforms for an application named app), which is a renamed version of the platform-specific .NET Core host, and a .dll file (such as app.dll), which is the actual application.

Wenn man eines nicht sagen kann, dass MSDN schlechte Dokumentation hat. Wenn wir nur ein Zehntel davon auf der Arbeit hätten, wär ich schon froh, ..
 
  • Gefällt mir
Reaktionen: dg2rbf und ruerueka
In meiner "Projektmappe" ist das scheinbar nicht mehr drin, darum wurde das nicht neu erstellt. Von den Versuchen von gestern Abend gibt es diese Datei testprogramm.runtimeconfig.json, damit funktioniert auch die Kopie in dem Ordner test.

Danke für Deine Tipps. Mir ist klar, dass ich um Coden zu lernen ein paar Bücher lesen sollte. Grund für meine Exkursion ist, dass ich diese Funktion aus dieser Klasse gebraucht habe, um einen String zu konvertieren. Es gab dafür keine andere Lösung, als das selbst zu kompilieren. :)
 
Zurück
Oben Unten