Когда я пытаюсь скомпилировать копию своего проекта на моей локальной машине, я получаю ошибку при заявлении что это перескакивающий через несовместимые библиотеки. Это не имеет место, когда я бездельничаю с активной версией, размещенной на сервере на работе [это делает отлично там].
Различные другие сайты имеют, приводят меня полагать, что это могло бы быть проблемой среды, поскольку я разрабатываю на 64-разрядном дистрибутиве Ubuntu, и я предполагаю, что серверная версия работает 32-разрядный. Тем не менее, после установки моих переменных среды к:
CFLAGS+=" -m32"
CXXFLAGS+=" -m32"
Я все еще получаю ту же ошибку компиляции:
/usr/bin/ld: skipping incompatible /dvlpmnt/libPI-Http.a when searching for -lPI-Http
Может haz учебное руководство?
== Редактирование ==
Это было выводом, который я получил, когда я последовал совету Jonathan:
http.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
По-видимому, рассматриваемая библиотека является 32-разрядной, в конце концов?
Это сообщение на самом деле не является ошибкой - это просто предупреждение о том, что данный файл имеет неправильную архитектуру (например, 32-бит против 64-бит, неправильная архитектура процессора). Компоновщик продолжит поиск библиотеки нужного типа.
Конечно, если вы также получаете ошибку типа не удается найти lPI-Http
, тогда у вас проблема :-)
Трудно сказать, каким будет точное решение, не зная деталей вашей системы сборки и makefiles, но вот пара выстрелов в темноте:
CFLAGS
, а не к
CTAGS
- вы уверены, что это
правильно? (То, что у вас есть, может быть правильным - это зависит от вашей системы сборки!)LDFLAGS
Если это не поможет - можете выложить полный вывод ошибок, плюс фактическую команду (например, gcc foo.c -m32 -Dxxx
и т.д.), которая была выполнена?
Обычно это не ошибка как таковая; это предупреждение о том, что первый найденный файл, соответствующий аргументу -lPI-Http
компилятора/линкера, не является действительным. Ошибка возникает, когда не удается найти другую библиотеку с нужным содержимым.
Итак, вам нужно посмотреть, является ли /dvlpmnt/libPI-Http.a
библиотекой 32-битных объектных файлов или 64-битных объектных файлов - скорее всего, она будет 64-битной, если вы компилируете с опцией -m32
. Затем необходимо установить, существует ли где-нибудь еще альтернативный libPI-Http.a
или libPI-Http.so
файл, который является 32-битным. Если это так, убедитесь, что каталог, содержащий его, указан в аргументе -L/some/where
для компоновщика. Если нет, то вам придется получить или собрать откуда-то 32-битную версию библиотеки.
Чтобы узнать, что находится в этой библиотеке, вам может понадобиться сделать следующее:
mkdir junk
cd junk
ar x /dvlpmnt/libPI-Http.a
file *.o
cd ..
rm -fr junk
Шаг 'file
' говорит вам, какого типа объектные файлы находятся в архиве. Остальное просто гарантирует, что вы не наделаете беспорядка, который нельзя будет легко убрать.