[18:09:42] <vlad2> High Sierra - будущее уже сегодня!
[21:38:14] <valexey> vlad2: блииииннн.. Вот есть у нас С++ и статическое поле в классе.
[21:38:40] <valexey> И, тип этого поля не простой, а таки это объект некого класса.
[21:38:52] <valexey> И всё что мне нужно от этого поля - чтобы вызвался конструктор оного класса.
[21:39:14] <valexey> Так вот - если никто не обращается к этой единице компиляции явным образом, то конструктор никогда не зовется.
[21:39:24] <valexey> И в бинаре в принципе это поле отсутствует!
[21:39:29] <valexey> Даже если оно volatile!
[21:39:53] <valexey> то же самое с банальной глобальной переменной.
[21:40:51] <valexey> есть какой-то способ переносимым способом сделать так, чтобы переменная таки создавалась?
[22:17:20] <valexey> гм. воспроизвести бы ситуацию в pet project'e...
[22:36:31] <_valexey_> Люблю плюсы...
[22:41:13] <vlad2> У тебя компилятор странный. Последний раз я такое видел в code warriror. Типа strip dead code или что-то такое.
[22:41:53] <_valexey_> А!
[22:42:08] <vlad2> Глобальные переменные обязаны звать конструктор на загрузке. У нас много чего на это завязано :)
[22:42:09] <_valexey_> У меня эта переменная в статик либе
[22:42:37] <_valexey_> И при линковке екзешника линкер ее просто не кладет в екзешник
[22:42:38] <vlad2> Статик либы - зло ;)
[22:42:48] <_valexey_> Ибо там оно типа не используется
[22:43:04] <_valexey_> Сцууукооо...
[22:43:14] <_valexey_> Как же это фиксануть то?
[22:45:55] <_valexey_> А вот на обероне таких проблем не было бы!
[22:46:08] <_valexey_> Или правильно говорить "в обероне"?
[22:49:30] <_valexey_> Блин. Тупой линкер!
[22:50:30] <vlad2> Вна обероне! Приор арт же ш :)
[22:51:06] <vlad2> Дык, вызови функцию из либы.\
[22:52:47] <_valexey_> Дык там весь цимес в том, чтобы через вызов конструктора у меня классы регистрировались в списке
[22:53:08] <_valexey_> И чтобы ничего руками не дергать
[22:53:25] <_valexey_> Просто реализуешь еще один класс со статическим полем и все!
[22:53:46] <_valexey_> Фабрика про него уже все знает.
[22:54:27] <_valexey_> Как же бесит!
[22:54:30] <vlad2> Почему либа не вызывается? Ты ж как минимум хедер какой из нее включаешь?
[22:55:28] <vlad2> Статическое поле использует тип из либы?
[22:55:50] <_valexey_> http://www.viralchart.ru/Images1/Images/besit/1.jpg
[22:56:41] <_valexey_> Вот хедер того класса который имеет ту статическую переменную-поле, никуда не включается.
[22:57:03] <_valexey_> Но даже если его заинклюдить - этого не достаточно.
[22:58:16] <_valexey_> Часа через 2-3 попробую тестовый проект накидать.
[22:58:39] <_valexey_> Статическое поле и весь класс - в стат либе
[22:59:33] <_valexey_> https://stackoverflow.com/questions/1229430/how-do-i-prevent-my-unused-global-variables-being-compiled-out
[22:59:40] <_valexey_> Вот моя проблема
[22:59:45] <_valexey_> 1 в 1
[23:20:01] <valexey_> и даже целый блогопост есть про это: https://ofekshilon.com/2013/04/06/forcing-construction-of-global-objects-in-static-libraries/
[23:23:13] <valexey_> да-а.. это решение...
[23:23:19] <valexey_> А ТЕПЕРЬ ДЛЯ GCC
[23:34:02] <vlad2> Дык это, тебе принципиально статическую библиотеку? Я так понимаю с динамикой нет проблем?
[23:34:57] <vlad2> Сиерра как-то неохотно ставится - уже минут 20 и еще 36 осталось.
[23:47:41] <valexey_> ну, в проекте это статическая либа
[23:47:44] <valexey_> так то
[23:47:48] <valexey_> большая либа
[23:48:08] <valexey_> и стоит ли ломать сложившийся ход вещей для одной штуки - я хз
[23:48:22] <valexey_> может сейчас линкер уговорю не расстреливать такие объекты
[23:50:16] <vlad2> В смысле статическая в динамическую должна легко переделываться. Подобные штуки вполне веская причина для этого...
[23:52:01] <valexey_> ну, виноват - компоновщик. значит если опцию найти компоновщика (для студии вот уже есть, осталось для ld), то это будет хорошим решением
[23:52:03] <valexey_> iMHO
[23:52:27] <valexey_> правда стажеры/студенты если что повесятся, если туда залезут ;-)
[23:52:44] <valexey_> magic!
[23:52:56] <valexey_> Voodoo people - magic people!