реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
Viciouspriest
сообщение Dec 15 2016, 08:06
Сообщение #1





Группа: Участник
Сообщений: 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

Подозреваю, что дело в ключах, но не знаю в каких. Очень надеюсь на ответ.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 15 2016, 17:42
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Вроде бы ещё надо линкеру передать ключ оптимизации (-Os)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Viciouspriest
сообщение Dec 16 2016, 06:55
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 24-08-12
Пользователь №: 73 242



Цитата(AHTOXA @ Dec 15 2016, 20:42) *
Вроде бы ещё надо линкеру передать ключ оптимизации (-Os)

Не, дело было не в этом. Вчера наконец-то разобрался. Почему-то -Lto выкидывает библиотеку m. Я прописывал -lm, но это не помогало потому, что lm надо прописывать в самом конце, после перечисления всех о-файлов, а я писал вначале. Почему это происходит - непонятно...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 16 2016, 07:04
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А, ну это известная штука. Понять этого нельзя, поэтому надо запомнитьsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 16 2016, 07:48
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Viciouspriest @ Dec 16 2016, 09:55) *
Я прописывал -lm, но это не помогало потому, что lm надо прописывать в самом конце, после перечисления всех о-файлов
Разумеется. По умолчанию включено --as-needed.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 21 2016, 14:49
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Aaron
сообщение Dec 23 2016, 07:09
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



да, злостная шутка с этими линкер-опциями и порядком подключения библиотек.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 23 2016, 07:52
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Aaron @ Dec 23 2016, 10:09) *
да, злостная шутка с этими линкер-опциями и порядком подключения библиотек.
Это избавляет от излиших связей. Если бибилиотека по факту не используется, то линковаться с ней не надо, несмотря на то, что она почему-то указана в списке на линковку. Так что какие уж шутки.

См. https://www.altlinux.org/UpStream/AsNeeded
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 25 2016, 14:32
Сообщение #9


Adept
******

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



QUOTE (andrew_b @ Dec 23 2016, 14:52) *
Это избавляет от излиших связей. Если бибилиотека по факту не используется, то линковаться с ней не надо, несмотря на то, что она почему-то указана в списке на линковку.

Всего этого можно достичь (и полно линкеров, которые это умеют.., да, по ходу, все кроме гнутого умеют) и без этой дурацкой фичи: либо сделать обработку двухпроходной, либо разрешение связей не делать непосредственно в процессе чтения данных - например, сперва все данные читаются, потом, когда вся оперативная информация в наличие, производится разрешение связей. Гнушный линкер просто 1) однопроходный, 2) производит обработку связей непосредственно во время чтения файлов, т.е. если библиотека указана раньше объектного файла, из которого есть ссылка на библиотечный объект, то из библиотеки ничего не линкуется.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 25 2016, 17:31
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(dxp @ Dec 25 2016, 17:32) *
Всего этого можно достичь (и полно линкеров, которые это умеют.., да, по ходу, все кроме гнутого умеют)
А ничего, что тут весь тулчейн GNU? Вы предлагаете заменить GNU ld на какой-то другой? И всякие configure.ac и Makefile.am патчить тоже предлагаете? Ну круто, чо.
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 26 2016, 04:24
Сообщение #11


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 вдруг исправят и его поведение в части подключения библиотек не будет зависеть от порядка их указания, это ничего не сломает и ничего править не придётся.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 26 2016, 05:37
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(dxp @ Dec 26 2016, 07:24) *
Я сказал лишь то, что есть и другие способы реализовать выкидывание ненужных объектов, свободные от зависимостей, возникающих от порядка указания библиотек. Кстати, даже если представить, что ld вдруг исправят и его поведение в части подключения библиотек не будет зависеть от порядка их указания, это ничего не сломает и ничего править не придётся.

Во-первых, уже ничего исправлять не будут. Такое поведение есть уже исправленное. Во-вторых, старое поведение по-прежнему доступно при указании --no-as-needed. Но оно ненужно. Все апстримы уже давно исправились.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 26 2016, 07:29
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Андрей, вы б послушали, что dxp говорит...

Выкидывать неиспользуемые библиотеки - это хорошо, и с этим никто не спорит.
Однако сам механизм определения "неиспользуемости" в ld сделан неидеально (даже ваша ссылка на шаманские действия с альтлинуксом это подтверждает).

Конкурирующие организации почему-то сделали этот механизм лучше (никогда не задумывался, как - там оно просто РАБОТАЛО).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 26 2016, 07:36
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(esaulenka @ Dec 26 2016, 10:29) *
Однако сам механизм определения "неиспользуемости" в ld сделан неидеально
Конкурирующие организации почему-то сделали этот механизм лучше (никогда не задумывался, как - там оно просто РАБОТАЛО).
Ещё раз. У нас есть тулчейн имени GNU. Линкер там работает так, как работает.
Да существеут куча других тулчейнов, в которых линкеры рабоают по-другому. Но причём тут они, зачем о них тут писать?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 26 2016, 08:08
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Ответов по делу тут два: #6 от demiurg_spb (что делать и где читать) и #9 от dxp (с объяснением, что там "внутри").
Спасибо за оба, кстати: раньше я просто менял местами инклюды.

И какой-то флуд на тему "у меня всё работает, проблемы на вашей стороне" (не буду пальцем показывать).
Слава богу, gcc - это не нечто, отлитое в граните в полночь 1.01.1970, и он худо-бедно развивается. Будем надеяться, и здесь допилят тоже...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 00:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.0161 секунд с 7
ELECTRONIX ©2004-2016