Пропуск несовместимых библиотек при компиляции - PullRequest
31 голосов
/ 25 июня 2010

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

Различные другие сайты внушают мне, что это может быть проблемой среды, поскольку я работаю в 64-битном дистрибутиве Ubuntu и предполагаю, что серверная версия работает на 32-битной версии.Тем не менее, после установки моих переменных среды:

CFLAGS+=" -m32"
CXXFLAGS+=" -m32"

я все еще получаю ту же ошибку компиляции:

/usr/bin/ld: skipping incompatible /dvlpmnt/libPI-Http.a when searching for -lPI-Http

Может ли учебник haz?

== Edit ==

Это был вывод, который я получил, когда последовал совету Джонатана:

http.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

Очевидно, что рассматриваемая библиотека все-таки 32-битная?

Ответы [ 2 ]

32 голосов
/ 25 июня 2010

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

Конечно, если вы также получаете сообщение об ошибке can't find lPI-Http, у вас есть проблема: -)

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

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

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

11 голосов
/ 25 июня 2010

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

...