Как вытащить неожиданные зависимости сборки стандартных библиотек

Я чувствую себя несколько нелепо, но я пытаюсь импортировать библиотеки OpenBLAS в проект. Они были построены с gfortran в качестве компилятора Фортрана. У моих ранних сборок не было проблем, просто потянув libopenblas.so в, но в другой системе, он задыхается libgfortran.so когда я пытаюсь запустить нашу программу, которой там нет. У меня сложилось впечатление, что это стандартная библиотека в большинстве, если не во всех системах Linux. Я мог бы, вероятно, добавить копию libgfortran.so в Artifactory, и пусть Apache Ivy вытащит его, но кажется, что было бы разумнее использовать стандартную версию, если это возможно. Есть ли хороший способ вытащить его через Айви при выполнении ant resolve команда, если она не существует в системе?

Альтернативным решением может быть статическая связь libgfortran.a в системе компиляции, но мои попытки сделать это, добавив -static RELATIVE_PATH_TO_LIBS/libgfortran.a Компиляция и связывание прекрасно, но я все еще получаю ошибки при запуске указанной программы в системе, в которой отсутствует библиотека.

Спасибо за любую помощь, которую вы можете оказать.

0

Решение

Если формат исполняемого файла — это формат файла «ELF» (по умолчанию в системах Linux), вы можете использовать «readelf» для отображения динамического раздела исполняемого файла:

readelf -d my_executable_file

Он должен содержать список всех необходимых общих библиотек. Это возможность проверить, требует ли исполняемый файл этой библиотеки.

Если проблема связана с «libgfortran.so», а «libgfortran.a» доступен, я переименую «libgfortran.a» в «libxxxx.a» и использую переключатели компоновщика:

-Lpath_containing_libxxxx.a -lxxxx

вместо «-lgfortran». Я бы не использовал переключатель «-static», потому что в этом случае компоновщик также пытается статически связать все остальные библиотеки. Компоновщик должен автоматически статически связывать «-lxxxx», поскольку динамическая библиотека с таким именем недоступна.

1

Другие решения

Других решений пока нет …