2012-02-03 7 views
2

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

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

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

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

Etc ..

у меня есть два вопроса:

1) Будет ли IA32-ЛИЭС позволит мне использовать эту библиотеку?

2) Как я должен «включить» его использование, либо в целом, либо предпочтительно специфичны для NetBeans (если применимы)

Спасибо

ответ

5

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

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

Для компиляции foo.c как 32 бита исполняемым, используйте

НКУ -m32 -o Foo foo.c

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

+0

Или 16 бит. Эй, DOS еще не совсем мертв! –

1

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

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

+0

Этот ответ (http://stackoverflow.com/questions/1943681/linking-32-bit-library-to-64-bit-program) очень похож на ваш вопрос. – austin1howard

+0

Да, установка g ++ - многократный был необходим, но спасибо! –