170 похожих чатов

Коллеги! Я честно скажу, не знаю, в какой чат писать правильнее,

но так как это генерирует С++ компилятор, то напишу в этот.

Делаю я тут один PR в oneTBB и на macOS всплыла очень странная проблема.
typeinfo для классов, если я собираю код clang'ом из xcode имеют тип символов S в выводе nm.
typeinfo для этих же самых классов в onetbb, которая собрана в интеле неизвестным мне компилятором имеют тип символов D в выводе nm.

Выглядит это следующим образом.

Моя сборка разными версиями XCode:
% nm -g lib/libtbb.12.dylib | grep __ZTI
0000000000024608 S __ZTIN3tbb6detail2r110user_abortE
0000000000024588 S __ZTIN3tbb6detail2r111unsafe_waitE
00000000000245c8 S __ZTIN3tbb6detail2r114bad_last_allocE


Бинарный пакет с гитхаба от интела:
% nm -g lib/libtbb.12.dylib | grep __ZTI
0000000000067b20 D __ZTIN3tbb6detail2r110user_abortE
0000000000067aa8 D __ZTIN3tbb6detail2r111unsafe_waitE
0000000000067b58 D __ZTIN3tbb6detail2r112missing_waitE
0000000000067ae0 D __ZTIN3tbb6detail2r114bad_last_allocE


Из-за этой разницы после моего PR символ __ZTIN3tbb6detail2r112missing_waitE в моей сборке начинает экспортироваться (как и должен), но в сборке от Intel меняет тип с D на S.
Это решает проблему видимости в библиотеках, собранных в XCode, но похоже ломает ABI в сборке внутри Intel.

И похоже это происходит для всех typeinfo данных в dylib библиотеке onetbb.

Есть у кого-нибудь идеи, что вообще происходит?
Мои идеи закончились 🙁

9 ответов

28 просмотров

Идея есть но на тебе не понравится... как известно type-info компайлер специфик и не переносимо

Две сборки с++ от разных компиляторов никогда не были совместимыми. Даже две сборки с++ от одного компилятора, но с разными опциями могут быть несовместимы.

Int Unsigned
Две сборки с++ от разных компиляторов никогда не б...

Даже две сборки одного компилятора с одними флагами, но разных версий могут быть не совместимы, чего уж там

Пашечка
Даже две сборки одного компилятора с одними флагам...

но ABI стандартной библиотеки "ломать" всё равно не будем

Int Unsigned
Две сборки с++ от разных компиляторов никогда не б...

помнится я какую-то либу собирал, указал ей как обычно через окружение gcc брать т.к. проект gcc'ой собирается сборочный срипт либы такой "ага … ага … о! в системе есть шланг!! так! собираемся шлангом!!!11"

может S это static, D это dynamic?

Vladislav-Shchapov Автор вопроса
다니엘(줄리아)
может S это static, D это dynamic?

Это похоже укладка в разные сегменты: Сборка XCode - (__DATA_CONST,__const), у интела получается (__DATA,__data). Это в выводе nm с ключем -m "Display the N_SECT type symbols (Mach-O symbols) as (segment_name, section_name) followed by either external or non-external and then the symbol name."

Гражданин Котейко
помнится я какую-то либу собирал, указал ей как об...

> gcc --version Apple clang version 14.0.3 (clang-1403.0.22.14.1) Target: arm64-apple-darwin22.6.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
> gcc --version Apple clang version 14.0.3 (clang-...

шикарно, но у меня дело на линухе было с нормальным гцц и шлангом

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта