Linux кросс-компиляция и динамические библиотеки / линковки - PullRequest
3 голосов
/ 31 марта 2011

Я пытаюсь разработать для BeagleBoard. Поэтому я установил CodeSourcery Sourcery_G ++ _ Lite Toolchain.

Я хочу использовать библиотеку opencv. Поэтому я загрузил исходники в свою систему разработки Ubuntu, скомпилировал gcc в качестве разделяемой библиотеки и установил библиотеку. Когда я создаю приложение helloworld для архитектуры x86, все в порядке.

Теперь я хочу скомпилировать то же приложение с другим набором инструментов для ARM-архитектуры.

Я получаю следующие предупреждения / ошибки при компиляции / компоновке:

john@ubuntu:~/Downloads/BeagleTest$ arm-none-linux-gnueabi-g++ -c ImageProcessing.cpp -o ImageProcessing.o -I/usr/local/include
cc1plus: warning: include location "/usr/local/include" is unsafe for cross-compilation

john@ubuntu:~/Downloads/BeagleTest$ arm-none-linux-gnueabi-g++ -c Main.cpp -o Main.o -I/usr/local/include
cc1plus: warning: include location "/usr/local/include" is unsafe for cross-compilation

john@ubuntu:~/Downloads/BeagleTest$ arm-none-linux-gnueabi-g++ -oApplication -L/usr/local/lib Main.o ImageProcessing.o -lopencv_core
/usr/local/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation
/usr/local/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/local/lib/libopencv_core.so when searching for -lopencv_core
/usr/local/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lopencv_core
collect2: ld returned 1 exit status

Очевидно, я использую те же каталоги include и библиотеки-патчи, которые я использую для архитектуры x86. Это не работает. Но что мне делать? Нужно ли кросс-компилировать opencv-библиотеку?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Библиотеки должны быть кросс-скомпилированы, и вы должны убедиться, что при компоновке найдена правильная библиотека. Если это не сработает автоматически, вы можете взглянуть на параметр командной строки --sysroot в gcc.

0 голосов
/ 01 апреля 2011

Да. Библиотеки являются специфическими для архитектуры.

...