Использование ia32-libs - PullRequest
2 голосов
/ 03 февраля 2012

Я пытаюсь использовать асбиблиотеку, полученную из здесь Я работаю в 64-разрядной версии, но предварительно скомпилированная статическая библиотека предназначена для 32-разрядной версии. Я не хочу перекомпилировать библиотеку, потому что у меня не установлен OpenCV 1.0, и я не хочу устанавливать такую ​​старую версию этого программного обеспечения.

Мой работодатель сказал мне, что вы можете использовать ia32-libs, что позволило бы мне использовать библиотеку на 64-битной машине. Я установил эти библиотеки, используя apt.

В netbeans, в моей IDE, я сейчас пытаюсь использовать библиотеку. Я продолжаю получать сообщения:

/ usr / bin / ld: i386 архитектура входного файла `../asmlib/libasmlibrary.a(asm_shape.o) 'несовместимо с i386: выход x86-64

Etc ..

У меня два вопроса:

1) Позволит ли ia32-libs мне использовать эту библиотеку?

2) Как я должен "разрешить" его использование, обычно или предпочтительно для netbeans (если применимо)

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Исполняемый файл (включая библиотеки, от которых он зависит) должен быть полностью 32-битным или 64-битным. Вы не можете смешивать и сопоставлять объектные файлы разных типов.

Таким образом, чтобы использовать 32-битную библиотеку, вы должны скомпилировать вашу программу как 32-битный исполняемый файл и связать ее с 32-битной версией libc и других базовых библиотек. В Debian вам понадобятся такие пакеты, как libc6-dev-i386 и ia32-libs-dev.

Чтобы скомпилировать foo.c как 32-битный исполняемый файл, используйте

gcc -m32 -o foo foo.c

Как это сделать с netbeans оставлено в качестве упражнения.

1 голос
/ 03 февраля 2012

Я не думаю, что вы можете использовать ia32-libs для компиляции 64-битной программы, используя 32-битные библиотеки. Это не то, для чего предназначен ia32-libs ... он предназначен для запуска полностью 32-битных программ в 64-битных системах.

Я думаю, что вам лучше всего собрать 32-битное программное обеспечение. Если вы использовали командную строку, вы можете просто добавить флаг -m32 к gcc. Для netbeans в Свойства проекта> Сборка> Компилятор C (или компилятор C ++, если это то, что вы используете) есть раскрывающийся список для выбора архитектуры. Если 32-разрядная версия недоступна в этом раскрывающемся списке, вы можете добавить -m32 в поле Дополнительные параметры .

...