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 ответов

7 просмотров

Идея есть но на тебе не понравится... как известно 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-...

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

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

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

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта