From f643c9b223e2d748230e9cebc46a6890dffea687 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 11 Nov 2020 19:39:59 +0300 Subject: [PATCH] =?utf8?q?=D0=9B=D0=B8=D0=BD=D0=BA=D0=BE=D0=B2=D0=BA=D0=B0?= =?utf8?q?=20ld=20=D0=B8=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA=20-l?= =?utf8?q?=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. -- 2.48.1