Пропуск Несовместимых Библиотек в компиляции

Когда я пытаюсь скомпилировать копию своего проекта на моей локальной машине, я получаю ошибку при заявлении что это перескакивающий через несовместимые библиотеки. Это не имеет место, когда я бездельничаю с активной версией, размещенной на сервере на работе [это делает отлично там].

Различные другие сайты имеют, приводят меня полагать, что это могло бы быть проблемой среды, поскольку я разрабатываю на 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-разрядной, в конце концов?

34
задан kelly.dunn 25 June 2010 в 17:05
поделиться

2 ответа

Это сообщение на самом деле не является ошибкой - это просто предупреждение о том, что данный файл имеет неправильную архитектуру (например, 32-бит против 64-бит, неправильная архитектура процессора). Компоновщик продолжит поиск библиотеки нужного типа.

Конечно, если вы также получаете ошибку типа не удается найти lPI-Http, тогда у вас проблема :-)

Трудно сказать, каким будет точное решение, не зная деталей вашей системы сборки и makefiles, но вот пара выстрелов в темноте:

  1. Просто для проверки: обычно вы должны добавить флаги к CFLAGS, а не к CTAGS - вы уверены, что это правильно? (То, что у вас есть, может быть правильным - это зависит от вашей системы сборки!)
  2. Часто флаг нужно передать и компоновщику - поэтому вам также может понадобиться изменить LDFLAGS

Если это не поможет - можете выложить полный вывод ошибок, плюс фактическую команду (например, gcc foo.c -m32 -Dxxx и т.д.), которая была выполнена?

35
ответ дан 27 November 2019 в 17:03
поделиться

Обычно это не ошибка как таковая; это предупреждение о том, что первый найденный файл, соответствующий аргументу -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' говорит вам, какого типа объектные файлы находятся в архиве. Остальное просто гарантирует, что вы не наделаете беспорядка, который нельзя будет легко убрать.

11
ответ дан 27 November 2019 в 17:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: