Итак, настало время охуительных историй.
Если вкратце: секция инициализации глобальных переменных выкидывается из статических библиотек.
Если по пунктам:
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 так различаются?
hirthwork
05.09.2012 04:28 mcabber0BC705EB
Do you really want to delete ?
http://stackoverflow.com/questions/18046... и где-то ещё более подробное объяснение видел
спасибо, покурю
сам с этим столкнулся не так давно, хитрым образом инициировал FFMPEG :-)
http://stackoverflow.com/questions/47679... в догонку
угу, до этого уже сам допёр