Я пытаюсь сгруппировать несколько служебных классов SDL в статическую библиотеку для С++, используя g++. Я использую Ubuntu Linux 11.10 и gcc версии 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3). Версия ар 2.21.53.20110810.
Поскольку все файлы маленькие, в настоящее время я использую только заголовочные файлы. Я упоминаю об этом на случай, если это как-то связано с проблемой. Кроме того, большинство заголовков компилируются в объектный код с параметром -lSDL (я не уверен, что это правильно или даже уместно, но в любом случае это не работает). Наконец, есть пара статических членов для двух разных классов, определенных в их собственном файле, которые должны быть включены на последних этапах процесса (попытка следовать ODR).
Дело в том, что каждый файл прекрасно скомпилирован в объектный код, затем архив создается с использованием ar, но когда я пытаюсь скомпилировать основной файл и связать его с моей новой библиотекой, как это (будучи libDanGfx.a архивом, который я создаю):
g++ -Wall -ansi -pedantic newmain.cpp -L. -lSDL -lDanGfx
Я получаю эту ошибку:
./libDanGfx.a: не удалось прочитать символы: в архиве нет индекса; запустите ranlib, чтобы добавить один
Это происходит даже после удаления всех архивов и объектного кода.
Я изучил сайт и не нашел ответа на проблему. Использование ranlib вообще не помогло, также пытался передать -m32 моему компилятору, но все равно безрезультатно. Пробовал на трех разных машинах, все неудачно.
Фрэнки, я подумываю отказаться от всего этого архива, обновить make-файл и просто связать объектные файлы, но я действительно хочу знать, что здесь происходит, и немного узнать в процессе.
Я ожидаю, что много информации будет отсутствовать, поэтому на всякий случай я загрузил файл .tar.gz со всем этим (просто распакуйте и попробуйте makefile). Для вашего просмотра все файлы .o будут находиться в каталоге объектов, и каждую используемую команду можно будет прочитать в make-файле. Кроме того, на главном экране должны отображаться какие-то бессмысленные вещи (вероятно, красные квадраты, поскольку файлы ресурсов не загружаются для экономии места, конечно, файлы .o и .a также исключены).
Файл доступен по этой ссылке.
ranlib
? - person Some programmer dude   schedule 06.08.2012