Oct 10, 2006 20:42
сегодня я узнал опытным путем, что оказывается линкер (gcc -> collect2 -> ld) линкует статические либы к бинарнику в порядке обратном их появлению в коммандной строке, причем почему-то на это дело влияют разные уровни оптимизации и всякие другие опции компилятора.
вот ведь блядство, а.
work,
unix,
routine,
dumb
Leave a comment
Comments 10
PS больше всего меня позабавили глобальные переменные для саморегистрации. При переходе на статический билд они просто исчезали ибо извне функции того TU никто не звал.
PPS это был не gcc, а SUN'овский компайлер.
Reply
я тут словил тривиальный, но от того не менее забавный баг с порядком инициализации статиков в разных TU тоже вот вчера :)
Reply
кстати, можно тебе вопрос как к эксперту по c++ с мировым именем™?
Reply
вопрос задавай конечно, только ты мне льстишь все же :)
Reply
а вопрос такой: вот C++-сные include файлы для C-библиотеки, типа . насколько я понял из стандарта, они должны все класть в std (17.4.1.2). но все реальные реализации, которые я видел, кладут и в std и в global. я что-то понял не так? или реализации не соответстуют стандарту?
Reply
имхо соответствуют, т.к. никто не запрещает класть еще и в global, зато бенефит - совместимость с C, а недостаток - разные сигнатуры всяких isalpha/isdigit и проч.
Reply
Leave a comment