Я перекрестно компиляюсь исполняемым файлом на Linux, чтобы нацелиться на Cortexa72. Исполняемый файл связывается с пакетом поддержки совета директоров, сгенерированного через программное обеспечение AMD Vitis. Из -за циклических зависимостей, присутствующих в библиотеках пакета поддержки платы (или неверного порядка связывания), я использую следующий код Cmake для выполнения связывания: < /p>
...
target_link_options(
myexe.elf PRIVATE
-T ${LINKER_SCRIPT} "-Wl,--start-group"
-lmylibA -lmylibB ... -lc -lgcc -lstdc++
"-Wl,--end-group"
)
...
< /code>
Однако во время связывания линкера жалуется, что он не может разрешить некоторые символы, поскольку они не определены (в данном случае системные вызовы, такие как, _close ...). Эта ошибка, кажется, имеет смысл, как следующий вызов линкера < /p>
aarch64-none-elf-g++ .... -Wl,--start-group ... -lc -lgcc -lstdc++ -Wl,--end-group ...
< /code>
приводит к удалению LIBC из «Start-end-группы» (группа циклических зависимостей): < /p>
collect2 ... --start-group ... -lgcc -lstdc++ --end-group ... -lc ...
< /code>
В этом контексте у меня есть два вопроса: < /p>
Почему LIBC удаляется из «стартовой группы», несмотря на явное включение (так как я не так знаком с проектом GCC, я еще не нашел код в GCC. "Start-end-group" (с помощью-Start-Group ... -lc -lc ...-end-group
Я перекрестно компиляюсь исполняемым файлом на Linux, чтобы нацелиться на Cortexa72. Исполняемый файл связывается с пакетом поддержки совета директоров, сгенерированного через программное обеспечение AMD Vitis. Из -за циклических зависимостей, присутствующих в библиотеках пакета поддержки платы (или неверного порядка связывания), я использую следующий код Cmake для выполнения связывания: < /p> [code]... target_link_options( myexe.elf PRIVATE -T ${LINKER_SCRIPT} "-Wl,--start-group" -lmylibA -lmylibB ... -lc -lgcc -lstdc++ "-Wl,--end-group" ) ... < /code> Однако во время связывания линкера жалуется, что он не может разрешить некоторые символы, поскольку они не определены (в данном случае системные вызовы, такие как, _close ...). Эта ошибка, кажется, имеет смысл, как следующий вызов линкера < /p> aarch64-none-elf-g++ .... -Wl,--start-group ... -lc -lgcc -lstdc++ -Wl,--end-group ... < /code> приводит к удалению LIBC из «Start-end-группы» (группа циклических зависимостей): < /p> collect2 ... --start-group ... -lgcc -lstdc++ --end-group ... -lc ... < /code> В этом контексте у меня есть два вопроса: < /p>
Почему LIBC удаляется из «стартовой группы», несмотря на явное включение (так как я не так знаком с проектом GCC, я еще не нашел код в GCC. "Start-end-group" (с помощью-Start-Group ... -lc -lc ...-end-group [/code] результаты-start-group ... -lc ...->