Информация об изменениях

Сообщение Re: как можно указать компилятору и линковшину не удалять не от 30.04.2020 17:34

Изменено 30.04.2020 17:36 удусекшл

Re: как можно указать компилятору и линковшину не удалять не используемую функци
Здравствуйте, sergey2b, Вы писали:

S>я нашел один вариант __attribute__((noreturn))

S>но он для статических функцию

Можно попробовать собрать единицу трансляции в режиме, когда все функции не раскладываются по отдельным секциям, а кладутся в одну. При этом в единице трансляции должно быть что-то, что гарантированно используется. Такая опция есть у всех известных мне компиляторов.

Другой вариант — ковырять компилер-специфик прагмы и прочие директивы.

Ты, как я понимаю, собираешь DLL/SO? Если так, то наверно надо явно указать, что ты хочешь это экспортировать. Для DLL это можно сделать. Для линупса с их SO-шками, в которых обычно торчит наружу всё, что есть — тут да, надо подумать. Можно попробовать замутить какие-0то зависимости, которые компилер/линкер не смогут разрулить, но это не точно.

Для экзешника вроде это мало имеет смысла, если ты конечно не собираешь экзешник, экспортирующий какие-то функции, которые кто-то собирается импортировать — например, зависимые от загружающего их экзешника DLLки.
Re: как можно указать компилятору и линковшину не удалять не
Здравствуйте, sergey2b, Вы писали:

S>я нашел один вариант __attribute__((noreturn))

S>но он для статических функцию

Можно попробовать собрать единицу трансляции в режиме, когда все функции не раскладываются по отдельным секциям, а кладутся в одну. При этом в единице трансляции должно быть что-то, что гарантированно используется. Такая опция есть у всех известных мне компиляторов.

Другой вариант — ковырять компилер-специфик прагмы и прочие директивы.

Ты, как я понимаю, собираешь DLL/SO? Если так, то наверно надо явно указать, что ты хочешь это экспортировать. Для DLL это можно сделать. Для линупса с их SO-шками, в которых обычно торчит наружу всё, что есть — тут да, надо подумать. Можно попробовать замутить какие-0то зависимости, которые компилер/линкер не смогут разрулить, но это не точно.

Для экзешника вроде это мало имеет смысла, если ты конечно не собираешь экзешник, экспортирующий какие-то функции, которые кто-то собирается импортировать — например, зависимые от загружающего их экзешника DLLки.

ЗЫ А __attribute__((noreturn)) — это совсем из другой оперы, и то, что они сейчас линкуются безусловно — это просто баг/тупизна линкера, и на которую закладываться не стоит