не может прочитать символы: архив не имеет индекса; запустить ranlib, чтобы добавить один - PullRequest
24 голосов
/ 04 мая 2010

Я попытался создать библиотеку с

ar -r -c -s libtestlib.a *.o

, как указано в этом уроке http://matrixprogramming.com/Tools/CompileLink.html

Но при связывании с библиотекой возникает ошибкас ranlib также, но все равно ошибка приходит .. я работаю с Ubuntu9.10 Пожалуйста, предложите мне какое-то решение для этого

Ответы [ 4 ]

22 голосов
/ 04 мая 2010

Ваша команда архива выглядит нормально, вы можете попробовать следующее. 1) Получить объектные файлы в архиве / статической библиотеке

ar -t libtestlib.a

2) Для каждого объектного файла (скажем, foo.o) из шага 1

file foo.o 

Это скажет вам формат объектного файла. Если объектный файл был скомпилирован для другой платформы, это может привести к ошибке при построении индекса для архива. Чтобы исправить это, вам нужно перекомпилировать эти файлы.
3) Для каждого объектного файла из шага 1 выполните

nm foo.o

В этом списке перечислены символы, экспортированные из файла.

13 голосов
/ 12 апреля 2013

Я использовал MinGW для компиляции приложения для Windows, когда я получил ошибку, поэтому я нашел встроенные команды MinGW:

i686-w64-mingw32-ar

А

x86_64-w64-mingw32-ar

Попробуйте использовать их вместо ar, если вы столкнулись с проблемой в MinGW. Они оба решили проблему для меня.

2 голосов
/ 11 декабря 2012

libtool также имеет полезную опцию: -export-symbols-regexp.

0 голосов
/ 15 марта 2012

Я столкнулся с точно такой же проблемой при попытке скомпилировать библиотеки NBIS. Есть опция для

make install LIBNBIS=yes

, который создает один архив, содержащий другие архивные файлы. Компоновщик gcc не обрабатывает это изящно и просто выдает В архиве нет индекса . Исправление заключается в том, чтобы оставить архивы в виде отдельных файлов

make install LIBNBIS=no

Затем просто свяжите приложение с необходимыми архивами. Порядок подачи в архив важен, чтобы убедиться, что компоновщик идентифицирует необходимые зависимости, а затем разрешает их при обработке файлов .a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...