Может кто-нибудь объяснить, что делает опция GNU ld --undefined
?
Работа над проектом LiteOS. Приложение связано со многими -u
опциями. Например -utask_shellcmd
.
руководство по компоновщику GNU for --undefined=symbol
просто говорит:
Принудительно вводить символ в выходной файл как неопределенный символ. Это может, например, вызвать связывание дополнительных модулей из стандартных библиотек.
Таким образом, символ будет включен в выходной файл как неопределенный. Что делать, если символ уже определен в одном из связанных файлов obj? Если он действительно не определен, когда произойдет связывание дополнительных модулей и как это произойдет?
main()
вызывается из-за того, что код запуска (crt0.o
или аналогичный) вызывает функцию, но не определяет ее, поэтому компоновщик ищет определение в ваших объектных файлах. Параметр--undefined=symbol
сообщает компоновщику, чтоsymbol
следует искать среди сканируемых объектных файлов и библиотек. Я не проверял, имеет ли значение его позиция в командной строке компоновщика. Если символ уже определен, это не имеет значения (и больше не будет привязано). Если в конце связывания он все еще не определен, связывание может завершиться неудачно. - person Jonathan Leffler   schedule 04.03.2017