Size: a a a

cxx.Дискуссионная

2020 March 26

RM

Roy Mustang in cxx.Дискуссионная
О, вот
источник

RM

Roy Mustang in cxx.Дискуссионная
с inline он удалил test )
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
с inline он удалил test )
static ещё попробуй...
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
static ещё попробуй...
Тоже удалил
источник

RM

Roy Mustang in cxx.Дискуссионная
Значит тут линковщик виноват на линуксе?
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Тоже удалил
Мир прекрасен, не правда ли?
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Roy Mustang
Если не вдаваться в подробности, кратко расскажу что тут происходит, сравнили одинаковый код на Windows Clang-9 std:c++2a -O2 и Linux Clang-9 с теми же флагами и кодом, на Windows функция test заинлайнилась в main и функция test была удалена на выходном файле, а в Linux произошло все тоже самое, только функция test после инлайна в майн не удалилась из бинаря на выходе
Я уже прочитал
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Значит тут линковщик виноват на линуксе?
Не виноват
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Кланг, гцц и мсвс это тулчейны. На винде кланг использует студийный линкер
источник

RM

Roy Mustang in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Кланг, гцц и мсвс это тулчейны. На винде кланг использует студийный линкер
ааа понял
источник

RM

Roy Mustang in cxx.Дискуссионная
Получается линковщики разные
источник

AB

Artöm Bakri Al-Sarmi... in cxx.Дискуссионная
Можешь поставить lld и сравнить
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Значит тут линковщик виноват на линуксе?
Не виноват
nm a.out | grep Test
00000000000011e0 T _Z4TestRjSt8functionIFvvEE
источник

O

Ofee in cxx.Дискуссионная
Ofee
Не виноват
nm a.out | grep Test
00000000000011e0 T _Z4TestRjSt8functionIFvvEE
Этот символ экспортируется наружу, если его удалить — никто не сможет его использовать
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
Этот символ экспортируется наружу, если его удалить — никто не сможет его использовать
Так линкер же должен видеть, что его никто не использует при линковке
источник

RM

Roy Mustang in cxx.Дискуссионная
Тут как бы линкер майкрософт поумнее оказался
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Так линкер же должен видеть, что его никто не использует при линковке
Ты его можешь использовать после компиляции
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Тут как бы линкер майкрософт поумнее оказался
Нет, просто он скрывает символы по умолчанию
источник

RM

Roy Mustang in cxx.Дискуссионная
Ну все же, тут я бы плюсик майку поставил, потому что линуксовый линкер за тебя решает, автоматом и опять же нужно прибегать к явному коду
источник

RM

Roy Mustang in cxx.Дискуссионная
А так я думаю что на винде если бы ты вызывал функцию из другого места, то скорее всего он по умолчанию оставил бы Test
источник