Как использовать сторонний фреймворк зависит от dylib для IOS в Delphi Firemonkey

Я использую сторонний SDK, представленный как libXXX.a, который требует

  • libstdc++.dylib
  • libz.dylib

05.15.2017 ОТВЕТ. Наконец я нашел время, чтобы записать свое решение. Если ваш сторонний SDK зависит от некоторых динамических библиотек, сделайте следующее:

  1. Например, динамическая библиотека называется "libSuperLibrary.dylib".
  2. Например, сторонний SDK называется «SuperFramework.framework».
  3. Перейдите в «Проект - Параметры - Компилятор Delphi - Путь поиска Framework"
  4. Заполните поле путем к вашему фреймворку, например "C:\path\to\my\frameworks\"
  5. Перейдите в «Проект — Параметры — Связывание — Параметры, переданные в связанный LD».
  6. Заполните поле строкой "-ObjC -framework SuperFramework -lSuperLibrary
  7. Компиляция

person Denis Petrov    schedule 05.11.2015    source источник
comment
Что такое «блестящий способ использования статических библиотек в Embarcadero»? Если вы собираетесь критиковать их, пожалуйста, объясните, почему, иначе это просто звучит язвительно. Лучше оставить вопрос нейтральным, и если вы считаете, что что-то было сделано плохо, объясните это (хотя бы ссылкой).   -  person David    schedule 21.03.2016
comment
Вы должны сделать это для каждого метода в классе? Если да, то это кажется странным. Вы вошли в QP, чтобы сделать систему лучше? (quality.embarcadero.com. Пожалуйста, разместите здесь ссылку, и я проголосую за нее. Пожалуйста, включите краткое пример того, что представляет собой текущая система и какой она должна быть — помните, что это отчет об ошибке, и чем больше вы можете помочь тем, кто сортирует отчеты, чтобы они поняли, что это важно, тем лучше.)   -  person David    schedule 22.03.2016


Ответы (1)


IOS не поддерживает динамические библиотеки. При сборке с помощью XCode он автоматически связывает необходимые статические библиотеки, но только в конечном приложении, а не в том случае, если вы создаете статическую библиотеку. Вместо этого вы можете указать Delphi обрабатывать зависимости.

В файле заголовка pascal для libXXX.a (куда вы импортируете функции в Delphi) добавьте dependency следующим образом:

function  MyFunction; cdecl; external libXXX.a name 'myfunction' dependency 'stdc++'

Я сам использовал его с «c++» (соответствует «libc++.dylib») и «stdc++» (соответствует «libstdc++.dylib»), но вам придется попробовать самостоятельно, если он работает с библиотекой z.

Подробнее читайте здесь: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Procedures_and_Functions#Specifying_Dependencies_of_the_Library

person Hans    schedule 06.11.2015
comment
Я отредактировал свой пост. Как вы думаете, что я делаю неправильно? - person Denis Petrov; 06.11.2015
comment
Напишите «stdc++» вместо «libstdc++.dylib». - person Hans; 06.11.2015
comment
Обновите свой вопрос новыми ошибками, потому что они должны отличаться от предыдущих. - person Hans; 10.11.2015
comment
Я не знаю, что еще идет не так в вашей ситуации, но использование dependency является решением по крайней мере одной из ваших проблем. - person Hans; 24.11.2015
comment
Я думаю то же самое, но когда библиотека IDE throw не найдена для -llibz.dylib, это означает, что я где-то пропустил каталог, который должен содержать такую ​​библиотеку, ИЛИ я неправильно использовал формат библиотеки в коде. Так что же это за загадочная папка ИЛИ использование формата? - person Denis Petrov; 30.11.2015