hirthwork 05.09.2012 04:28 mcabber0BC705EB

Итак, настало время охуительных историй.
Если вкратце: секция инициализации глобальных переменных выкидывается из статических библиотек.
Если по пунктам:
1. echo '#include <cstdio>\nint main() { printf("good bye, cruel world\\n"); }'>main.cpp
2. echo '#include <cstdio>\nint i = printf("hello, world\\n");'>lib.cpp
3. gcc -c -o lib.o lib.cpp
4. ar rs liblib.a lib.o
ar: creating liblib.a
5. gcc main.cpp liblib.a
6. ./a.out
good bye, cruel world
7. gcc main.cpp lib.o
8. ./a.out
hello, world
good bye, cruel world

Если по полочкам:
1. Статические либы есть банально запакованные в архив объектники
2. При линковке со статической либой объектники из неё распаковываются и тупо линкуются к программе, точно так же как в п. 7
3. Так какого ж хуя результаты п.6 и п.8 так различаются?

Recommended by: @magog, @ulidtko
1. hatred 05.09.2012 04:33 Psi+

http://stackoverflow.com/questions/18046... и где-то ещё более подробное объяснение видел

2. hirthworkhatred /1 05.09.2012 04:33 mcabber0BC705EB

спасибо, покурю

3. hatredhirthwork /2 05.09.2012 04:34 Psi+

сам с этим столкнулся не так давно, хитрым образом инициировал FFMPEG :-)

4. hatredhirthwork /2 05.09.2012 04:42 Psi+

http://stackoverflow.com/questions/47679... в догонку

5. hirthworkhatred /4 05.09.2012 04:42 mcabber0BC705EB

угу, до этого уже сам допёр

Do you really want to delete ?