|
Launchpad'овский gcc-arm-none-eabi Lto и math.h |
|
|
|
Dec 15 2016, 08:06
|
Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242

|
Всем здравствуйте. Осваиваю ланчпадавский компилятор. Столкнулся с тем, что при включенной Lto не видит функции, например sqrt(), из math.h. "undefined reference to `sqrt' collect2.exe: error: ld returned 1 exit status".
Compile opts -mcpu=cortex-m3 -flto -lto -mthumb -fpack-struct -Wpadded -g -Os Linker opts -mcpu=cortex-m3 -flto -mthumb -Wl,--gc-sections,-Map=Project.elf.map,-cref,-u,Reset_Handler
Target CPU STM32F103RET6 gcc-arm-none-eabi-5_4-2016q3-20160926-win32
Подозреваю, что дело в ключах, но не знаю в каких. Очень надеюсь на ответ.
|
|
|
|
|
Dec 16 2016, 06:55
|
Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242

|
Цитата(AHTOXA @ Dec 15 2016, 20:42)  Вроде бы ещё надо линкеру передать ключ оптимизации (-Os) Не, дело было не в этом. Вчера наконец-то разобрался. Почему-то -Lto выкидывает библиотеку m. Я прописывал -lm, но это не помогало потому, что lm надо прописывать в самом конце, после перечисления всех о-файлов, а я писал вначале. Почему это происходит - непонятно...
|
|
|
|
|
Dec 21 2016, 14:49
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Прочитал доку про --as-needed и для меня не совсем очевидно описанное ТС поведение (откидывание libm). Я понял, что линкер должен выкинуть лишь те либы на которые нет ссылок. Поясните пожалуйста, если не трудно, что я не так понимаю. Понял кажется! Если либа включена до объектиников, то на момент её линковки на неё просто ещё нет ссылок. Линкер видимо по умолчанию однопроходный. Кстати, для решения сложных циклических завязок либа от либы есть ключики --start-group --end-group Код -Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Dec 25 2016, 14:32
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (andrew_b @ Dec 23 2016, 14:52)  Это избавляет от излиших связей. Если бибилиотека по факту не используется, то линковаться с ней не надо, несмотря на то, что она почему-то указана в списке на линковку. Всего этого можно достичь (и полно линкеров, которые это умеют.., да, по ходу, все кроме гнутого умеют) и без этой дурацкой фичи: либо сделать обработку двухпроходной, либо разрешение связей не делать непосредственно в процессе чтения данных - например, сперва все данные читаются, потом, когда вся оперативная информация в наличие, производится разрешение связей. Гнушный линкер просто 1) однопроходный, 2) производит обработку связей непосредственно во время чтения файлов, т.е. если библиотека указана раньше объектного файла, из которого есть ссылка на библиотечный объект, то из библиотеки ничего не линкуется.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Dec 26 2016, 04:24
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (andrew_b @ Dec 26 2016, 00:31)  А ничего, что тут весь тулчейн GNU? Вы предлагаете заменить GNU ld на какой-то другой? И всякие configure.ac и Makefile.am патчить тоже предлагаете? Ну круто, чо. Где вы увидели предложение что-то менять? Я сказал лишь то, что есть и другие способы реализовать выкидывание ненужных объектов, свободные от зависимостей, возникающих от порядка указания библиотек. Кстати, даже если представить, что ld вдруг исправят и его поведение в части подключения библиотек не будет зависеть от порядка их указания, это ничего не сломает и ничего править не придётся.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Dec 26 2016, 05:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(dxp @ Dec 26 2016, 07:24)  Я сказал лишь то, что есть и другие способы реализовать выкидывание ненужных объектов, свободные от зависимостей, возникающих от порядка указания библиотек. Кстати, даже если представить, что ld вдруг исправят и его поведение в части подключения библиотек не будет зависеть от порядка их указания, это ничего не сломает и ничего править не придётся. Во-первых, уже ничего исправлять не будут. Такое поведение есть уже исправленное. Во-вторых, старое поведение по-прежнему доступно при указании --no-as-needed. Но оно ненужно. Все апстримы уже давно исправились.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|