Имеет ли значение порядок строк ссылок для supc++?

Это продолжение предыдущего вопроса -

Как использовать другой STL с g++

Теперь я могу получить свой код для сборки, используя другой STL. Однако мне все еще нужно связать -lsupc++ (вместе с указанным другим STL)

Я вижу анекдотические ссылки на то, что -lsupc++ должна быть последней библиотекой в ​​строке ссылок. Я не могу найти окончательный ответ на это. В настоящее время это не последняя библиотека для меня на линии ссылок, и, похоже, все работает нормально.

Спасибо!


person MK.    schedule 04.08.2009    source источник


Ответы (1)


Упорядочение ссылочной строки — дело придирчивое и капризное. Правило состоит в том, что библиотеки должны быть связаны в обратном порядке зависимости: если объект A находится в libfoo и зависит от объекта C из libbar, то линия связи должна идти -lfoo -lbar, а не наоборот. Наличие -lsupc++ в конце гарантирует, что если какие-либо другие библиотеки, которые вы связываете, зависят от объектов в libsupc++, зависимость разрешится правильно. В вашем случае конечные библиотеки, вероятно, просто не имеют неразрешенных зависимостей.

person Meredith L. Patterson    schedule 04.08.2009
comment
Хороший совет. Но некоторые версии ld настолько примитивны, что вам действительно придется дважды указывать имя библиотеки в командной строке, чтобы разрешить циклические зависимости. - person ; 05.08.2009
comment
Ух ты. Я никогда не сталкивался с одним из них, и, даст Бог, никогда не столкнусь, но это приятно знать. Спасибо! - person Meredith L. Patterson; 05.08.2009
comment
Большое спасибо, ребята. Теперь я немного больше понимаю всю эту игру со связыванием :) кстати, я предполагаю, что этот порядок имеет значение только тогда, когда у вас есть статическая библиотека в зверинце (т.е. supc++)? т.е. если бы были только динамические библиотеки, то порядок не имел бы значения? - person MK.; 05.08.2009
comment
Я так понимаю, что это имеет значение независимо. - person Meredith L. Patterson; 05.08.2009