Здравствуйте, dad, Вы писали:
dad>приветствую!
dad>в библиотеке в cpp файле объявлен статический объект:
dad>
dad>static Object okey = Object();
dad>
dad>конструктор которого делает некую функциональность. dad>при динамической линковке библиотеки он создается, dad>при статической — нет. в чем проблема?
Вероятно в единице трансляции, в которой объявлен okey,
не определены больше никакие объекты/функции (используемые
в других единицах трансляции)?
При статической линковке, линкер может выкинуть *.obj файлы из состава *.lib,
если в нем не определены никакие используемые символы.
C>Вероятно в единице трансляции, в которой объявлен okey, C>не определены больше никакие объекты/функции (используемые C>в других единицах трансляции)?
ну да — это реализация внешнего интерфейса, которая дергает внешнюю функцию.
есть какие-либо идеи/флаги ?
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Здравствуйте, dad, Вы писали:
dad>конструктор которого делает некую функциональность. dad>при динамической линковке библиотеки он создается, dad>при статической — нет. в чем проблема?
Ops>used
Ops> This attribute, attached to a variable, means that the variable must be emitted even if it appears that the variable is not referenced.
Ops>
не — не помогает. либа моя — потому напишу обвязку с extern функциями регистрации плагинов. лучше явно чем танцы с объектниками.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Здравствуйте, dad, Вы писали:
dad>не — не помогает. либа моя — потому напишу обвязку с extern функциями регистрации плагинов. лучше явно чем танцы с объектниками.
Ну вообще сама идея полагаться на сайд-эффекты глобальных переменных как-то не очень. Тем более, при статической линковке ты еще при сборке знаешь, что будешь подключать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Ops>Ну вообще сама идея полагаться на сайд-эффекты глобальных переменных как-то не очень. Тем более, при статической линковке ты еще при сборке знаешь, что будешь подключать.
все в программировании один большой сайд-эффект.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
dad>приветствую!
dad>в библиотеке в cpp файле объявлен статический объект:
dad>
dad>static Object okey = Object();
dad>
dad>конструктор которого делает некую функциональность. dad>при динамической линковке библиотеки он создается, dad>при статической — нет. в чем проблема?
Здравствуйте, MTimur, Вы писали: MT>Здравствуйте, dad, Вы писали: MT>
Скрытый текст
dad>>приветствую!
dad>>в библиотеке в cpp файле объявлен статический объект:
dad>>
dad>>static Object okey = Object();
dad>>
dad>>конструктор которого делает некую функциональность. dad>>при динамической линковке библиотеки он создается, dad>>при статической — нет. в чем проблема?
MT>Если функция Get будет в списке экспорта, все должно слинковаться.
Только в этом случае объект будет создан при первом вызове функции,
а пор сабжу он должен создаваться автоматически
Здравствуйте, icWasya, Вы писали:
W>Здравствуйте, MTimur, Вы писали: MT>>Если функция Get будет в списке экспорта, все должно слинковаться. W>Только в этом случае объект будет создан при первом вызове функции, W>а пор сабжу он должен создаваться автоматически
Здравствуйте, dad, Вы писали:
dad>И хотя я уже переписал — сработало банальное volatile: dad>http://rsdn.ru/forum/trash/6078041
dad>Слона-то я и не приметил! Интересно — будет работать с другими компиляторами? dad>Кто перенес сообщение в мусор — не понятно. Даже спасибо не сказать.
Я сам и перенес. Выяснил, что на самом деле не работает (у меня в тестовом примере) Поэтому потёр, чтобы не позориться.
Хотя мысль про volatile возникла первой.
С уважением,
Владимир Лебедев-Шмидтгоф
Санкт-Петербург, РФ.
D>Я сам и перенес. Выяснил, что на самом деле не работает (у меня в тестовом примере) Поэтому потёр, чтобы не позориться. D>Хотя мысль про volatile возникла первой.
У меня сработало ...
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Здравствуйте, dad, Вы писали:
dad>спасибо. но хотелось бы быть твердо уверенным, что это не рашается с помощью флагов. dad>-Wl,--whole-archive — дает еще больше проблем.
а в чем проблема? Надо обернуть линковку библиотеки в -Wl,--whole-archive <библиотека> -Wl,--no-whole-archive. Тогда берется все содержимое этой конкретной библиотеки, а остальные зависимости линкуются как обычно — избирательно. И при такой линковке конструктор будет вызван.
G>а в чем проблема? Надо обернуть линковку библиотеки в -Wl,--whole-archive <библиотека> -Wl,--no-whole-archive. Тогда берется все содержимое этой конкретной библиотеки, а остальные зависимости линкуются как обычно — избирательно. И при такой линковке конструктор будет вызван.
G>
пробовал — масса ошибок. Проект сложный, библиотек много, cmake, и в конечном счете библиотека сама линкуется в ExternalProject у зависимости модуля прописываются через внешний файл.
выставить флаг на отдельный файл — не пробовал.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Здравствуйте, dad, Вы писали:
dad>пробовал — масса ошибок. Проект сложный, библиотек много, cmake, и в конечном счете библиотека сама линкуется в ExternalProject у зависимости модуля прописываются через внешний файл.
Так и должно быть. У тебя будет куча повторяющихся символов. Нужно только один файл обернуть.
dad>выставить флаг на отдельный файл — не пробовал.
D>Я сам и перенес. Выяснил, что на самом деле не работает (у меня в тестовом примере) Поэтому потёр, чтобы не позориться. D>Хотя мысль про volatile возникла первой.
действительно не работает — из-за привнесенного наведенного бага либа собиралась как shared — а я обрадовался ))
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
сработало. но пришлось в нескольких местах файлы сборки править для cmake и для внешнего приложения и для тестов.
зато код лишний выпилил )
пока оставлю так, но конечном счете, думаю оставлю обвязку с явным вызовом — слишком грязный хак.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)