Embarcadero RAD Delphi 10.3.3, не могу скомпилировать мое приложение с библиотекой Box2D для 64-битных Android - PullRequest
0 голосов
/ 29 февраля 2020

Невозможно скомпилировать мое приложение для Android 64-бит с Delphi 10.3.3. Мое приложение использует библиотеку Box2D. Во время компиляции я получаю следующие ошибки:

[DCC Error] E2597 C:\Users\Public\Documents\Embarcadero\Studio\android-ndk-r17b\toolchains\aarch64-linux-android-4.9\prebuilt\windows\aarch64-linux-android\bin\ld.exe: cannot find -lFlatBox2D
C:\Users\Public\Documents\Embarcadero\Studio\android-ndk-r17b\toolchains\aarch64-linux-android-4.9\prebuilt\windows\aarch64-linux-android\bin\ld.exe: cannot find -lgnustl_static

Компиляция для Android 32-битного того же приложения прошла успешно. Компиляция другого моего (простого) приложения для Android 64-бит работает нормально.

Итак, я понял, что проблема только в Box2D для Android 64-бит, используемых в моем приложении.

Затем я также протестировал компиляцию приложения Box2D TestBed, которое идет с RAD (здесь ...\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Physics\TestBed\) - та же проблема - оно успешно скомпилировано для Android 32-бит, но та же ошибка, когда я компилирую TestBed для Android 64-бит!

Пожалуйста, помогите. Тысячи строк кода в моем приложении уже, и теперь это полная остановка - не может собрать его для Android 64-бит [ напуган ]

ОБНОВЛЕНИЕ1

Вторая ошибка "невозможно найти -lgnustl_stati c" исправлена ​​путем добавления пути C:\Users\Public\Documents\Embarcadero\Studio\android-ndk-r17b\sources\cxx-stl\gnu-libstdc++\4.9\libs\arm64-v8a в меню Инструменты-> Параметры, затем 'Менеджер SDK' -> NDK -> 'Android SDK 25.2.5 64-битное значение '-> для' Delphi Путь к библиотеке NDK '.

Однако первая проблема' не может найти -lFlatBox2D 'по-прежнему существует. Я нашел только 2 файла библиотеки libFlatBox2D.a на моем компьютере, это

C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\debug
C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\release

Оба пути я добавил в один и тот же 'Delphi NDK Library path' в SDK Manager для Android 64bit. Тем не менее, теперь получаю сообщение об ошибке skipping incompatible libFlatBox2D.a when searching for -lFlatBox2D для каждого из этих путей.

Итак, вопрос сейчас - где найти совместимый libFlatBox2D.a, который требуется для Android 64bit?

UPDATE2:

Хм ... и в следующих 2 android64 путях нет файлов libFlatBox2D.a.

C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\debug
C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\release

Означает ли это, что 10.3.3 Delphi отсутствует установка 64-битной библиотеки Box2D android?

ОБНОВЛЕНИЕ3:

Как ответил @Stefanos, теперь у меня есть 64-битная версия libFlatBox2D.a , Но теперь во время компиляции я получил подсчет 1700 ошибок компоновщика имен Box2D, все они похожи на приведенные ниже:

[DCC Error] E2597 C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Physics\TestBed\Android64\Debug\Box2D.Common.o: In function `Box2d::Common::Create_b2Draw_delegate(System::DelphiInterface<Box2d::Common::Ib2Draw>)':
  Box2D.Common:(.text._ZN5Box2d6Common22Create_b2Draw_delegateEN6System15DelphiInterfaceINS0_7Ib2DrawEEE[_ZN5Box2d6Common22Create_b2Draw_delegateEN6System15DelphiInterfaceINS0_7Ib2DrawEEE]+0x0): undefined reference to `Create_b2Draw_delegate'
  C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Physics\TestBed\Android64\Debug\Box2D.Common.o: In function `Box2d::Common::Destroy_b2Draw_delegate(NativeUInt)':
  Box2D.Common:(.text._ZN5Box2d6Common23Destroy_b2Draw_delegateE10NativeUInt[_ZN5Box2d6Common23Destroy_b2Draw_delegateE10NativeUInt]+0x0): undefined reference to `Destroy_b2Draw_delegate'
  C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Physics\TestBed\Android64\Debug\Box2D.Common.o: In function `Box2d::Common::b2Version_Create()':
  Box2D.Common:(.text._ZN5Box2d6Common16b2Version_CreateEv[_ZN5Box2d6Common16b2Version_CreateEv]+0x0): undefined reference to `b2Version_b2Version'
  C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Physics\TestBed\Android64\Debug\Box2D.Common.o: In function `Box2d::Common::b2BlockAllocator_Create()':
  Box2D.Common:(.text._ZN5Box2d6Common23b2BlockAllocator_CreateEv[_ZN5Box2d6Common23b2BlockAllocator_CreateEv]+0x0): undefined reference to `b2BlockAllocator_b2BlockAllocator_1'
  C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Physics\TestBed\Android64\Debug\Box2D.Common.o: In function `Box2d::Common::b2BlockAllocator_Destroy(NativeUInt)':
  Box2D.Common:(.text._ZN5Box2d6Common24b2BlockAllocator_DestroyE10NativeUInt[_ZN5Box2d6Common24b2BlockAllocator_DestroyE10NativeUInt]+0x0): undefined reference to `b2BlockAllocator_dtor'
etc...etc...

UPDATE4: текущий статус

I'm ищем оригинальный libFlatBox2D.a файл библиотеки для Android 64-бит (Delphi 10.3.3). Если у кого-то есть, пожалуйста, поделитесь им со мной.

Вышеуказанные попытки не увенчались успехом. Требуется «оригинальный» 64-битный libFlatBox2D.a, которого нет в моей установке RAD 10.3.3 ...

UPDATE5:

Embarcadero QA создал заявку : https://quality.embarcadero.com/browse/RSP-27762 Будем ждать от их решения.

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Вам необходимо создать новый пакет с именем FlatBox2D, добавить все модули FlatBox из .. \ studio \ 20.0 \ source \ FlatBox2D и скомпилировать его для Android64.

Я создал пакет и скомпилировал отладочную и выпускную версии для Android64 с Delphi 10.3.3. В приведенной ниже ссылке вы найдете новые файлы пакета и папку Android64, в которой вы найдете libFlatBox2D.a для отладки и выпуска. Просто скопируйте файл .a в соответствующую папку в .. \ studio \ 20.0 \ lib \ Android64.

Вы всегда можете скомпилировать пакет самостоятельно, просто скопировав файлы FlatBox2D.dpr и FlatBox2D.dproj в .. \ studio \ 20.0 \ source \ FlatBox2D, загрузите dpr в Delphi и скомпилируйте его для Android64 ...

Стефанос

FlatBox2D.zip

1 голос
/ 29 февраля 2020

Правильно ли настроен путь поиска? Вы, вероятно, забыли включить / добавить / настроить его для 64-битной цели, попробуйте установить его для всех целей (см. Параметры проекта, а затем цель, измените цель на 64-битную и установите параметры там или выберите целевой все конфигурации), еще одна возможность - добавить эти файлы в проект.

http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_Box2D_in_Delphi_Applications

Я только что наткнулся на вашу проблему, в то время как я ищу самую последнюю версию box2d для Delphi? ! :)

Используете ли вы встроенный box2d в Delphi или более новую / более свежую версию, и если да, то откуда? лол, вопрос в ответе лол.

...