Ссылка на архив, содержащий другие архивные файлы статической библиотеки.

Я пытаюсь использовать библиотеку 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 в архиве как есть, прежде чем я это сделаю.

3

Решение

Задача ещё не решена.

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

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