КРОСС-КОМПИЛЬ ДЛЯ ПРОЦЕССОРА MIPS

Я разработал приложение для платформы Android. Оно предназначено для процессора ARM. Оно работает нормально. Я хочу попробовать то же приложение на Android, работающем на процессоре MIPS (32 бит). Я попытался кросс-компилировать приложение, но не смог сгенерировать общая библиотека. Я использую MIPS ndk и исходный код Android, настроенный для процессора MIPS. При создании статической библиотеки он не показывает никаких ошибок, но при создании общей библиотеки я получаю следующие ошибки:

/home/user/android-ndk-r7m/toolchains/mips-linux-android-4.4.3/предварительно собранный/linux-x86/bin/../lib/gcc/mips-linux-android/4.4.3/.. /../../../mips-linux-android/bin/ld: /home/user/workspace/testing/ccl_obj/libccl.a(teccl_call_initiate.o): перемещение R_MIPS_HI16 против `__gnu_local_gp' не может использоваться при создании общего объекта; перекомпилировать с -fPIC /home/user/workspace/testing/ccl_obj/libccl.a: не удалось прочитать символы: неверное значение collect2: ld вернул 1 статус выхода make: * [obj/local/mips- r2/libhello-jni.so] Ошибка 1

Пожалуйста, предложите любое решение.

Спасибо


person Sujanian    schedule 12.03.2012    source источник


Ответы (2)


Ошибка как бы подсказывает что делать.

При компиляции исходного кода добавьте флаг компилятора -fPIC.

person nos    schedule 12.03.2012
comment
Вы уверены, что он используется? Скомпилированы ли файлы .c с флагом -fPIC? Кажется, у вас есть какой-то libccl.a, что это? Это похоже на статическую библиотеку, какое значение она имеет по сравнению с общей библиотекой, которую вы создаете? - person nos; 12.03.2012
comment
Я не использую этот флаг -fPIC явно для компиляции файлов .c. При компиляции для ARM он не показал никаких ошибок. libccl.a - это статическая библиотека, созданная после компиляции файлов .c. Мой файл .so зависит от этого статическая библиотека. Но он не может прочитать этот файл. - person Sujanian; 13.03.2012
comment
@Sujanian Вы должны скомпилировать файлы .c, составляющие libccl.a, с флагом -fPIC, как и ВСЕ файлы исходного кода, которые вы используете для создания общего объекта. - person nos; 13.03.2012
comment
Не могли бы вы сказать мне точные команды для компиляции файлов .c для MIPS. Команды, которые я использую, предназначены для ARM. Я пробовал только эти команды и смог создать статическую библиотеку, но я думаю, что эти команды несовместимы с MIPS. , я хочу знать команды компиляции для MIPS. - person Sujanian; 14.03.2012
comment
Нет. Я не знаю, как настроена ваша сборка, как называется ваш кросс-компилятор и так далее. Все, что вам нужно сделать, это добавить одну вещь, флаг -fPIC, когда вы компилируете исходный код, который составляет вашу общую библиотеку. Исходный код включает ВСЕ, статические библиотеки, любой исходный код, который вы связываете вместе для создания общей библиотеки. - person nos; 14.03.2012
comment
Я устранил эту ошибку. Этот флаг отсутствовал во многих местах. Спасибо за вашу помощь @nos. - person Sujanian; 28.03.2012

На всякий случай, если кто-то столкнется с этой проблемой.

make clean 
make

Сегодня у меня возникла аналогичная проблема, и запуск очистки решил мою проблему.

person saurabh agarwal    schedule 05.05.2016