Forum: Compiler & IDEs GCC + Cmake + libs: STM32: arm-none-eabi-ranlib.exe: Permission denied


von Buzzwang (Gast)


Lesenswert?

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

von Dr. Sommer (Gast)


Lesenswert?

Kompilierst du mit mehreren Prozessen parallel? Mach das mal 
sequentiell, Windows hat Probleme damit wenn mehrere Prozesse 
gleichzeitig auf Dateien zugreifen.

von Buzzwang (Gast)


Lesenswert?

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"

von Buzzwang (Gast)


Lesenswert?

Zusatz für oben. Default Einstellung bei Ninja ist parallel

von Zweig (Gast)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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...

von Buzzwang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.