Archiv der Kategorie: Software-Entwicklung

Programmierung und Tools.

MSYS2 make: command not found

Ich habe MSYS2 installiert und dann die MinGW-Toolchain komplett installiert, mit folgendem Befehl:

$ pacman -S mingw-w64-x86_64-toolchain

Es sind praktisch die gesamten GNU-Entwickler-Tools dabei, einfach super. Trotzdem bekomme ich bei dem Aufruf von Make einen Fehler:

$ make
bash: make: command not found

Komisch ist, das gcc aber gefunden wird:

$ gcc
gcc.exe: fatal error: no input files
compilation terminated.

Die Ursache ist hier, dass die Tools alle wie erwartet heißen, mit der Ausnahme von Make. Dieses heißt im Bin-Ordner so:

msys64\mingw64\bin\mingw32-make.exe

Die Lösung ist hier einfach: man kopiert sich mingw32-make.exe in das selbe Verzeichnis und benennt die Kopie make.exe. So das beide Namensvarianten gefunden werden können. Fertig. Danach funktioniert es:

$ make
make: *** No targets specified and no makefile found. Stop.

Dieses Problem ist seit Jahren bekannt. Es wird aber leider vom MinGW-Team nicht korrigiert. Sehr schade.

OpenJDK mit Java FX

Heute versuchten wir ein JavaFX-Projekt zu erstellen. Die letzte Zeit hatten wir Adopt OpenJDK für die Java-Entwicklung verwendet. Aber wie wir heute feststellen mussten, hat Adopt OprnJDK kein OpenJFX dabei. Die Anleitungen um OpenJFX rein zu frickeln, ist sehr lang. Viel zu umständlich. Lösung? Einfach das OpenJDK von Amazon Corretto verwenden, dort ist Java FX gleich dabei.

Mercurial und HTTPS: certificate verify failed

Heute wollte ich ein neues Repository auf Sourceforge klonen und pushen, per HTTPS. Das Kommando sah in etwa so aus:

hg clone https://amin@hg.code.sf.net/project

Leider gabs eine schlechte Rückmeldung:

Abbruch: Fehler: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

Was ist passiert? Der Mercurial-Server lässt verständlicherweise nur verschlüsselte Verbindungen zu. Und der Hg-Client soll auch nur mit vertrauenswürdigen Servern kommunizieren. Dafür ist ein kryptisches Zertifikat nötig. Anscheinend hat die Hg-Installation (entgegen der Anleitung) keine Python-Zertifikatedatei dabei, obwohl Mercurial ein Python-Programm ist. Ich konnte jedenfalls keine cacert.pem finden. Da ich aber noch eine separate Python-Installation habe, konnte ich auf diese Verweisen. Dazu muss man in der globalen Mercurial-Konfiguration diese Datei einmal angeben:

; in der %USERPROFILE%\Mercurial.ini
[web]
cacerts=C:\Python27\Lib\site-packages\pip\_vendor\requests\cacert.pem

Es muss übrigens nicht diese Cacerts-Datei sein, man kann auch eine Datei aus einem Webbrowser exportieren. Diese kann auch auf *.crt enden und man kann mehrere Zertifikate in einer Datei hinter einander anfügen.

 

Java – for-each rettet einen

Heute sollte ich einen Fehler im fremden Code heraus finden. Das Java-Programm warf folgende Exception aus:

java.util.ConcurrentModificationException

Tja, es wurde auf jeden Fall von einer ArrayList-Collection geworfen. Meine erste Vermutung war, das zwei Threads auf dieser ArrayList schreiben. Also auf den thread-sicheren Vector umsteigen? Hat aber nichts geholfen.

Weiterlesen

Dateien in Mercurial ignorieren

Wenn man Mercurial (Hg) als Sourcecode Management System verwendet, will man keine automatisch erzeugten Dateien in das Repository schreiben. Zum Beispiel Backup-Dateien von Texteditoren (die mit der Tilde), Objektdateien von C oder C++ usw. Dazu legt man in das Projektverzeichnis eine Datei namens .hgignore an, in der man die Dateien oder Verzeichnisse auflistet, die Hg ignorieren soll. Weiterlesen