]> Sergey Matveev's repositories - stargrave-blog.git/commit
Линковка ld и порядок -l аргументов
authorSergey Matveev <stargrave@stargrave.org>
Wed, 11 Nov 2020 16:39:59 +0000 (19:39 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 11 Nov 2020 16:39:59 +0000 (19:39 +0300)
commitf643c9b223e2d748230e9cebc46a6890dffea687
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent9c165801f3fc0851b6f49d0d3a61ff90c1ba843c
Линковка ld и порядок -l аргументов

https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking
Работал я со своей C программой в LLVM/Clang/FreeBSD, работал в
GNU/Linux, GCC 4.x, glibc. А сегодня в современной Ubuntu с GCC10 не мог
собрать её. Упорно ругается что не может найти символы всякие, которые
из библиотек берутся. Беглый поиск "а не бага ли это GCC?" не дал
результатов. Начал тупо перебирать и менять местами все эти -l
аргументы чтобы заработало, ибо надо успеть это сделать довольно срочно.

Но позже нашёл вот статью в которой объясняет как именно обрабатываются
-l, что магии там нет, всё довольно просто. А я просто совершенно не
понимал (точнее подозревал, но в корне не верно) как линковщик работает.
А всё так "сложно" не просто так -- а чтобы быстро работал ld. Можно
указать пару аргументов (--{start,end}-group) и будет работать всегда и
везде, грубо говоря, но с соответствующим performance overhead.