(Untitled)

Oct 10, 2006 20:42

сегодня я узнал опытным путем, что оказывается линкер (gcc -> collect2 -> ld) линкует статические либы к бинарнику в порядке обратном их появлению в коммандной строке, причем почему-то на это дело влияют разные уровни оптимизации и всякие другие опции компилятора.

вот ведь блядство, а.

work, unix, routine, dumb

Leave a comment

some41 October 25 2006, 09:50:41 UTC
вообще либы просматриваются строго в порядке, в котором они поданы. но из либы берутся только те объектники, которые нужны для разрешения текущих неопределенных символов. так что если у тебя из объектников есть зависимость только от последней либы, то возьмется она.

кстати, можно тебе вопрос как к эксперту по c++ с мировым именем™?

Reply

antoxa October 25 2006, 10:28:00 UTC
у меня одна либа зависит от другой. твой ответ понял, будду знать, спасибо.

вопрос задавай конечно, только ты мне льстишь все же :)

Reply

some41 October 25 2006, 11:42:59 UTC
когда либы зависят друг от друга, то, в идеале, нужно их упорядочевать так, чтобы либа зависила только от либ правее ее в строке. иначе придется либу указывать несколько раз.

а вопрос такой: вот C++-сные include файлы для C-библиотеки, типа . насколько я понял из стандарта, они должны все класть в std (17.4.1.2). но все реальные реализации, которые я видел, кладут и в std и в global. я что-то понял не так? или реализации не соответстуют стандарту?

Reply

antoxa October 25 2006, 12:16:54 UTC
насколько я понимаю gcc вообще просто использует почти одинаковый код для cmath то же, просто инклудит math.h.
имхо соответствуют, т.к. никто не запрещает класть еще и в global, зато бенефит - совместимость с C, а недостаток - разные сигнатуры всяких isalpha/isdigit и проч.

Reply

some41 October 25 2006, 12:23:52 UTC
в стандарте прямо сказано - отличае math.h от cmath в том, что у последнего все в std. имхо, там это вполне однозначно написано. совместимость с C тут сомнительная - там нету такого заголовка вообще, скорее это для более плавного перехода на новые заголовки. а недостаток для пользователя такой - если забываешь писать std:: то получаешь не ту функцию (т.к. в global namespace нету вариантов с float и long double) и заметить это можно только случайно.

Reply

antoxa October 25 2006, 12:54:57 UTC
> в стандарте прямо сказано - отличае math.h от cmath в том, что у последнего все в std.
собсна так и есть, просто cmath инклудит math.h и на основе него в namespace std запихивает все что нужно.

> а недостаток для пользователя такой - если забываешь писать std:: то получаешь не ту функцию
да, я про это и сказал, насчет isspace/isalpha, а если еще и using namespace std где-то сказать или выкрутасы с ADL, то можно получить секс по полной :)

Reply

antoxa October 25 2006, 12:55:57 UTC
не понимаю нафига ты спрашивал, если сам же все знаешь и сам себе отвечаешь :)

Reply

some41 October 25 2006, 12:57:51 UTC
я типа уточняю и совета спрашиваю :)

Reply


Leave a comment

Up