Столкнувшись с этим, я либо просто взял команду final link, удалил все объекты и затем добавил обратно, пока она не заработала, либо обработал вывод команды nm.
Рабочий пример:
Глядя на вывод нм:
$ nm *.o
a.o:
00000000 T a
U aa
b.o:
00000000 T b
t.o:
U a
U b
00000000 T main
ua.o:
00000000 T ua
ub.o:
00000000 T ub
Итак, я создаю следующий сценарий awk
# find-unused.awk
BEGIN {req["main"]="crt"}
/\.o\:$/{
gsub(/\:/,"");
modulename=$0;
}
$1=="U"{
req[$2] = modulename;
}
/[0-9,a-f].* T/{
def[$3] = modulename;
}
END{
print "modules referenced:"
for (i in req)
{
if (def[i] != "")
print " "def[i];
}
print "functions not found"
for (i in req)
{
if (def[i] == "")
print " "i;
}
}
и затем назовите это так;
$ nm *.o|awk -f find-unused.awk
это говорит мне:
modules referenced:
t.o
a.o
b.o
functions not found
aa
Что верно - потому что функции ua & ub в приведенном выше примере не используются.