Я пытаюсь использовать библиотеку NBIS из NIST:
http://www.nist.gov/itl/iad/ig/nbis.cfm
NBIS состоит из нескольких связанных библиотек, которые они собирают в несколько архивных файлов. Они дают вам возможность при установке установить либо все отдельные файлы .a, либо объединить их в один монолитный файл .a. Я использовал несколько библиотечных файлов, но решил попробовать использовать один монолитный файл, чтобы упростить задачу. Но я получаю сообщение об ошибке при попытке сделать ссылку на него при использовании -lnbis
в моем шаге ссылки (используя g++
, который использует ld
):
libnbis.a: error adding symbols: Archive has no index; run ranlib to add one
Глядя на архив, он содержит другие отдельные файлы .a:
$ ar t libnbis.a
liban2k.a
libbozorth3.a
libcblas.a
... and so forth
Строка в Makefile, которая генерирует архив: $(AR) -ru libnbis.a *.a
Я пробовал бегать ranlib libnbis.a
и это не меняет его.
Итак, мой вопрос: как я могу связаться с библиотекой NBIS? Я знаю, на какие отдельные библиотеки внутри файла libnbis.a мне нужно ссылаться, если мне это нужно. Будет ли это работать так? Или NIST что-то делает не так, пытаясь объединить свои отдельные библиотеки в один архивный файл?
Я пытался искать вокруг, чтобы найти похожие проблемы, и кажется, что ответ на вышесказанное состоит в том, что они делают это неправильно. Например, ответы на этот вопрос предлагают распаковать отдельные файлы .a и упаковать файлы .o в архив конгломерата:
Как объединить два "Арканзас" статические библиотеки в одну
Есть также комментарий, предлагающий использовать libtool
:
https://stackoverflow.com/a/8170851/196561
Похоже, у меня есть пара вариантов, если я хочу сам создать файл libnbis.a. Я просто хотел убедиться, что не было никакого способа использовать файлы .a в архиве как есть, прежде чем я это сделаю.
Задача ещё не решена.
Других решений пока нет …