static variable + static link
От: dad  
Дата: 04.06.15 09:51
Оценка:
приветствую!

в библиотеке в cpp файле объявлен статический объект:

static Object okey = Object();


конструктор которого делает некую функциональность.
при динамической линковке библиотеки он создается,
при статической — нет. в чем проблема?
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: static variable + static link
От: Chorkov Россия  
Дата: 04.06.15 10:00
Оценка:
Здравствуйте, dad, Вы писали:

dad>приветствую!


dad>в библиотеке в cpp файле объявлен статический объект:


dad>
dad>static Object okey = Object();
dad>


dad>конструктор которого делает некую функциональность.

dad>при динамической линковке библиотеки он создается,
dad>при статической — нет. в чем проблема?

Вероятно в единице трансляции, в которой объявлен okey,
не определены больше никакие объекты/функции (используемые
в других единицах трансляции)?

При статической линковке, линкер может выкинуть *.obj файлы из состава *.lib,
если в нем не определены никакие используемые символы.
Re: static variable + static link
От: dad  
Дата: 04.06.15 10:03
Оценка:
забыл написать — gcc (другие не проверял)
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[2]: static variable + static link
От: dad  
Дата: 04.06.15 10:05
Оценка:
C>Вероятно в единице трансляции, в которой объявлен okey,
C>не определены больше никакие объекты/функции (используемые
C>в других единицах трансляции)?

ну да — это реализация внешнего интерфейса, которая дергает внешнюю функцию.
есть какие-либо идеи/флаги ?
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: static variable + static link
От: Ops Россия  
Дата: 04.06.15 10:06
Оценка:
Здравствуйте, dad, Вы писали:

dad>конструктор которого делает некую функциональность.

dad>при динамической линковке библиотеки он создается,
dad>при статической — нет. в чем проблема?

Тут объяснение:
http://stackoverflow.com/questions/9459980/c-global-variable-not-initialized-when-linked-through-static-libraries-but-ok

Если этот объект нигде в коде не используется, линкер его выкидывает при оптимизации.
Можно использовать /OPT:NOREF, если тебя это устраивает
Можно
#pragma comment(linker, "/include:okey")
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: static variable + static link
От: dad  
Дата: 04.06.15 10:26
Оценка:
Ops>Тут объяснение:
Ops>http://stackoverflow.com/questions/9459980/c-global-variable-not-initialized-when-linked-through-static-libraries-but-ok


да — видал. это для vc. для gcc пока не помогло то что там есть.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: static variable + static link
От: Evgeny.Panasyuk Россия  
Дата: 04.06.15 10:28
Оценка: +1
Здравствуйте, dad, Вы писали:

dad>при динамической линковке библиотеки он создается,

dad>при статической — нет. в чем проблема?

http://rsdn.ru/forum/cpp/5140189.flat.1
Автор: Evgeny.Panasyuk
Дата: 17.04.13
Re[2]: static variable + static link
От: dad  
Дата: 04.06.15 10:40
Оценка:
EP>http://rsdn.ru/forum/cpp/5140189.flat.1
Автор: Evgeny.Panasyuk
Дата: 17.04.13


спасибо. но хотелось бы быть твердо уверенным, что это не рашается с помощью флагов.
-Wl,--whole-archive — дает еще больше проблем.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[3]: static variable + static link
От: Evgeny.Panasyuk Россия  
Дата: 04.06.15 10:43
Оценка: +1
Здравствуйте, dad, Вы писали:

EP>>http://rsdn.ru/forum/cpp/5140189.flat.1
Автор: Evgeny.Panasyuk
Дата: 17.04.13

dad>спасибо. но хотелось бы быть твердо уверенным, что это не рашается с помощью флагов.
dad>-Wl,--whole-archive — дает еще больше проблем.

Как вариант вместо статической библиотеки можно линковать объектный файл
Автор: Evgeny.Panasyuk
Дата: 17.04.13
.
Re[4]: static variable + static link
От: dad  
Дата: 04.06.15 10:47
Оценка:
EP>Как вариант вместо статической библиотеки можно линковать объектный файл
Автор: Evgeny.Panasyuk
Дата: 17.04.13
.


да. печально. за ответ спасибо!
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[3]: static variable + static link
От: Ops Россия  
Дата: 04.06.15 11:01
Оценка: +1
Здравствуйте, dad, Вы писали:

dad>да — видал. это для vc. для gcc пока не помогло то что там есть.


Так а либа твоя? А то пишут про атрибут:

used
    This attribute, attached to a variable, means that the variable must be emitted even if it appears that the variable is not referenced.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: static variable + static link
От: dad  
Дата: 04.06.15 11:17
Оценка:
Ops>Так а либа твоя? А то пишут про атрибут:

Ops>
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 функциями регистрации плагинов. лучше явно чем танцы с объектниками.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[5]: static variable + static link
От: Ops Россия  
Дата: 04.06.15 11:49
Оценка:
Здравствуйте, dad, Вы писали:

dad>не — не помогает. либа моя — потому напишу обвязку с extern функциями регистрации плагинов. лучше явно чем танцы с объектниками.


Ну вообще сама идея полагаться на сайд-эффекты глобальных переменных как-то не очень. Тем более, при статической линковке ты еще при сборке знаешь, что будешь подключать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[6]: static variable + static link
От: dad  
Дата: 04.06.15 11:51
Оценка:
Ops>Ну вообще сама идея полагаться на сайд-эффекты глобальных переменных как-то не очень. Тем более, при статической линковке ты еще при сборке знаешь, что будешь подключать.

все в программировании один большой сайд-эффект.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: static variable + static link
От: MTimur  
Дата: 10.06.15 19:28
Оценка:
Здравствуйте, dad, Вы писали:
  Скрытый текст
dad>приветствую!

dad>в библиотеке в cpp файле объявлен статический объект:


dad>
dad>static Object okey = Object();
dad>


dad>конструктор которого делает некую функциональность.

dad>при динамической линковке библиотеки он создается,
dad>при статической — нет. в чем проблема?

Object &Get()
{
    static Object okey = Object();
    return okey;
}


Если функция Get будет в списке экспорта, все должно слинковаться.
Отредактировано 10.06.2015 19:29 MTimur . Предыдущая версия .
Re[2]: static variable + static link
От: icWasya  
Дата: 11.06.15 06:27
Оценка:
Здравствуйте, MTimur, Вы писали:

MT>Здравствуйте, dad, Вы писали:

MT>
  Скрытый текст
dad>>приветствую!

dad>>в библиотеке в cpp файле объявлен статический объект:


dad>>
dad>>static Object okey = Object();
dad>>


dad>>конструктор которого делает некую функциональность.

dad>>при динамической линковке библиотеки он создается,
dad>>при статической — нет. в чем проблема?

MT>
MT>Object &Get()
MT>{
MT>    static Object okey = Object();
MT>    return okey;
MT>}
MT>


MT>Если функция Get будет в списке экспорта, все должно слинковаться.

Только в этом случае объект будет создан при первом вызове функции,
а пор сабжу он должен создаваться автоматически
Re[3]: static variable + static link
От: MTimur  
Дата: 11.06.15 08:21
Оценка: -1
Здравствуйте, icWasya, Вы писали:

W>Здравствуйте, MTimur, Вы писали:

MT>>Если функция Get будет в списке экспорта, все должно слинковаться.
W>Только в этом случае объект будет создан при первом вызове функции,
W>а пор сабжу он должен создаваться автоматически

DllMain?
Re[4]: static variable + static link
От: dad  
Дата: 15.06.15 08:48
Оценка:
Ops>Так а либа твоя? А то пишут про атрибут:

И хотя я уже переписал — сработало банальное volatile:

http://rsdn.ru/forum/trash/6078041

Слона-то я и не приметил! Интересно — будет работать с другими компиляторами?
Кто перенес сообщение в мусор — не понятно. Даже спасибо не сказать.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re[5]: static variable + static link
От: Dair Россия http://dair.spb.ru
Дата: 15.06.15 09:11
Оценка:
Здравствуйте, dad, Вы писали:

dad>И хотя я уже переписал — сработало банальное volatile:

dad>http://rsdn.ru/forum/trash/6078041

dad>Слона-то я и не приметил! Интересно — будет работать с другими компиляторами?

dad>Кто перенес сообщение в мусор — не понятно. Даже спасибо не сказать.

Я сам и перенес. Выяснил, что на самом деле не работает (у меня в тестовом примере) Поэтому потёр, чтобы не позориться.
Хотя мысль про volatile возникла первой.
С уважением,
Владимир Лебедев-Шмидтгоф
Санкт-Петербург, РФ.
Re[6]: static variable + static link
От: dad  
Дата: 15.06.15 09:16
Оценка:
D>Я сам и перенес. Выяснил, что на самом деле не работает (у меня в тестовом примере) Поэтому потёр, чтобы не позориться.
D>Хотя мысль про volatile возникла первой.

У меня сработало ...
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.