2017-08-25 2 views
0

J'ai des difficultés à lier mon projet STM32 avec CMake. La commande de liaison qui est générée est:Liaison du projet C/C++ STM32 avec arm-none-eabi-gcc, newlib et cmake

/Users/jeremy/gcc-arm-none-eabi-6-2017-q2-update/bin/arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fdata-sections -ffunction-sections -g -Og -gdwarf-2 -MMD -MP -std=c++11 -Wl,-search_paths_first -Wl,-headerpad_max_install_names -specs=nano.specs -T/Users/jeremy/stm32l432kc_freertos_template/STM32L432KCUx_FLASH.ld -Wl,-Map=target.map,--cref -Wl,--gc-sections 

< ... lots of .o files here ...> 

-o stm32l432kc_freertos -lc -lm -lnosys 

Malheureusement, je reçois deux ensembles d'erreurs. La première est:

arm-none-eabi/bin/ld: warning: cannot find entry symbol arch_paths_first; defaulting to 0000000008000190 

qui indique qu'il n'y a pas de symbole d'entrée, mais dans le fichier LD la première ligne de code est: ENTRY(Reset_Handler). Le symbole Reset_Handler est défini dans un fichier lié startup_stm32l432xx.s.

La deuxième série d'erreurs concernent la stdlib:

/Users/jeremy/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-signalr.o): In function `_kill_r': 
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill' 
/Users/jeremy/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libg_nano.a(lib_a-signalr.o): In function `_getpid_r': 
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid' 

qui sont censés être résolus en liant -lnosys, mais l'éditeur de liens semble ignorer que. Essentiellement, l'éditeur de liens semble ignorer certaines des directives du fichier LD et ignorer certains des indicateurs que j'ai transmis. Je réalise que c'est probablement quelque chose que je fais mal, mais je ne vois pas ce que c'est.

Si j'ajoute -specs=nosys.specs, les deux dernières erreurs disparaissent, mais cela ne devrait pas être nécessaire? Quelqu'un peut-il m'aider s'il vous plaît à comprendre ce qui ne va pas ici?

Répondre

0

On dirait que CMake sur OSX ajoute le -Wl,-search_paths_first qui n'est pas supporté par la chaîne d'outils du bras gcc. Fix est d'ajouter ceci au fichier CMakeLists.txt:

if (APPLE) 
    string (REPLACE "-Wl,-search_paths_first" "" CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS}) 
    string (REPLACE "-Wl,-search_paths_first" "" CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}) 
endif() 

Fix est pris d'ici: https://github.com/kiibohd/controller/blob/master/Lib/CMake/build.cmake

ont encore aucune idée sur le -lnosys être ignoré si.