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

Всем привет. Можно как-то узнать, почему экспортируется символ? Собираю Qt-based проект в

Linux с
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
Для всего публичного API использую Q_DECL_EXPORT и почти всё хорошо.
Кроме того, что в выводе nm --extern-only есть две приватные структуры.
При этом подобных структур в коде ещё штук десять.
Ручное добавление Q_DECL_HIDDEN к этим структурам решает проблему, но я не могу понять, почему символы экспортировались и как можно этого избежать не прописывая hidden.

Экспортируется Message::Private и FileInfo::Private. Другие подобные структуры (MessageMediaInfo::Private и т.д.) следуют указанным настройкам и не экспортируются.

https://github.com/Kaffeine/telegram-qt/blob/master/TelegramQt/TelegramNamespace.hpp#L271
https://github.com/Kaffeine/telegram-qt/blob/master/TelegramQt/TelegramNamespace_p.hpp#L41

2 ответов

32 просмотра
Alexander- Автор вопроса

Почему могут экспортироваться символы, не отмеченные __attribute__((visibility("default"))) при сборке gcc с -fvisibility=hidden -fvisibility-inlines-hidden?

сделай CMAKE_EXPORT_COMPILE_COMMANDS ON и посмотри, не перекрываются ли у тебя -fvisibility=hidden

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта