Hallo, zu Selbstschulzwecken, habe ich versucht ein STM32 Projekt per CMake, Ninja mit GCC zu übersetzten. Mittels Libs. D.h. der Code wird erst in Libs übersetzt, z.B. in meinem Fall jeder Treiber (Core, Rcc, Tim, Spi, Gpio) in eine eigene Lib. Am Ende werden dann alle Libs zusammengelinkt. Hierbei habe ich das Problem, dass es nicht zuverlässing funktioniert. Es entstehen sporadisch 2 Fehler: a) Permission denied: z.B. arm-none-eabi-ranlib.exe: unable to rename 'lib\libgpio_lib.a'; reason: Permission denied Kompletter Aufruf: [..cut..] habe ich meine absoluten Pfade gelöscht cmd.exe /C "cd . && [..cut..]\bin\cmake.exe -E remove lib\libgpio_lib.a && [..cut..]\bin\arm-none-eabi-ar.exe qc lib\libgpio_lib.a pkg/Driver/STM32/F303CCT/20150710_V1_2_3/GPIO/Work_GPIO/CMakeFiles/gpio_ lib.dir/stm32f30x_gpio.c.obj && [..cut..]\bin\arm-none-eabi-ranlib.exe lib\libgpio_lib.a && cd ."[..cut..]\bin\arm-none-eabi-ranlib.exe: unable to rename 'lib\libgpio_lib.a'; reason: Permission denied b) Malformed archive: z.B. arm-none-eabi-ranlib.exe: lib\libbpp1_1g_rfont_lib.a: Malformed archive Kompletter Aufruf: [40/61] Linking C static library lib\libbpp1_1g_rfont_lib.a FAILED: lib/libbpp1_1g_rfont_lib.a cmd.exe /C "cd . && [..cut..]\bin\cmake.exe -E remove lib\libbpp1_1g_rfont_lib.a && [..cut..]\bin\arm-none-eabi-ar.exe qc lib\libbpp1_1g_rfont_lib.a pkg/Graphics/Font/RFont/Work_BPP1_1G/CMakeFiles/bpp1_1g_rfont_lib.dir/BP P1_1G_RFont.c.obj && [..cut..]\bin\arm-none-eabi-ranlib.exe lib\libbpp1_1g_rfont_lib.a && cd ."[..cut..]\bin\arm-none-eabi-ranlib.exe: lib\libbpp1_1g_rfont_lib.a: Malformed archive Gerade baue ich im Prinzip so lange, bis es funktioniert. Also schlechte Libs löschen und wieder Cmake starten. Die Probleme treten der häufig auf. Von daher ist es sehr nervig, bis es komplett gebaut ist. Ich habe schon im Internet danach gesucht. Das Einzige was ich gefunden habe, ist den Echtzeitvirenscanner auszuschalten. Das habe ich probiert, ich bekam aber trotzdem Fehler. Wie auch immer, das wäre auf dauer keine akzeptable Lösung. Gibt es auch einen anderen Weg, z.B. das Erzeugen temporärer Dateien, die dann umbenannt werden zu vermeiden ? Ich habe es auf verschieden - PCs mit WIN10 und Win7 - mit/ohne Virenscanner - verschiede Gcc versionen probiert. cmake/3.11.1-1 ninja/1.8.2-1 -- The C compiler identification is GNU 7.3.1 -- The CXX compiler identification is GNU 7.3.1
Kompilierst du mit mehreren Prozessen parallel? Mach das mal sequentiell, Windows hat Probleme damit wenn mehrere Prozesse gleichzeitig auf Dateien zugreifen.
Vielen Dank sieht schon viel besser aus. :) Ich habe Ninja zum Test direkt in der Konsole aufgerufen: ninja -j 1 ^Im build folder In Cmake muss ich noch schauen, wie man den Parameter "-j 1" an Ninja übergibt via "cmake --build"
Zusatz für oben. Default Einstellung bei Ninja ist parallel
Hallo, ich hab auch ein CMAKE Projekt welches den Ninja benutzt. Dort kommt es immer mal wieder zu fehlern, die weg sind, wenn ich das Ninja neu anstoße. Das Compiliern mit Ninja geht wirklich viel schneller als mit MAKE aber nicht zuverlässig.
Zweig schrieb: > Das Compiliern mit Ninja geht wirklich viel schneller als mit MAKE aber > nicht zuverlässig. Das "schneller" ist vermutlich der Grund dafür - ninja startet die Prozesse zu schnell hintereinander. Wenn ein Prozess eine Datei anlegt, sich beendet, und danach sofort der nächste Prozess gestartet wird der ebenfalls auf diese Datei zugreift, kann es sein dass der die Datei noch nicht "sieht", weil der Dateisystem (NTFS)-Treiber das noch nicht synchronisiert hat. Vielleicht kann man in ninja einstellen, dass es dazwischen explizit auf das Erscheinen der Datei wartet? Ich hatte mal ein ähnliches Problem mit unattended Installs: Wenn man einen Installer automatisch laufen lässt (z.B. den von Java) und direkt nach dessen Abschluss versucht auf das installierte Programm zuzugreifen, fehlen noch Dateien...
Hi, bei mir tut es jetzt, wenn man Ninja (über CMake) 'drosselt'. Ist natürlich nicht Sinn der Sache, aber es geht erst mal. cmake --build [my_build_dir] -- -j 1
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.