Ваш порядок ссылок неверен.Связывайте библиотеки после кода, который требует их, а не до.Как это:
gcc -o eigen eigen.c -llapack
gcc -static -o eigen eigen.c -llapack
Это должно решить проблемы со связью.
Чтобы ответить на следующий вопрос, почему это работает, документация GNU ld
гласит:
Разница в том, где в команде вы пишете эту опцию;компоновщик ищет и обрабатывает библиотеки и объектные файлы в указанном порядке.Таким образом, foo.o -lz bar.o' searches library
z 'после файла foo.o, но перед bar.o.Если bar.o ссылается на функции в `z ', эти функции могут не загружаться.
........
Обычно файлы, найденные таким образом, являются библиотечными файлами - архивфайлы, членами которых являются объектные файлы.Компоновщик обрабатывает архивный файл, просматривая его на наличие элементов, которые определяют символы, на которые до сих пор ссылались, но которые не были определены.Но если найденный файл является обычным объектным файлом, он связывается обычным способом.
т.е.компоновщик собирается выполнить один проход по файлу в поисках неразрешенных символов, и он следует файлам в том порядке, в котором вы их предоставили (т. е. «слева направо»).Если вы еще не указали зависимость при чтении файла, компоновщик не сможет удовлетворить зависимость.Каждый объект в списке ссылок анализируется только один раз.
Также обратите внимание, что GNU ld может выполнять переупорядочение в случаях, когда при связывании общих библиотек или объектных файлов обнаруживаются циклические зависимости.Но статические библиотеки анализируются только для неизвестных символов один раз.