Как я добавляю стороннюю Платформу к проекту iPhone?

Ваша проблема здесь в том, что вы неправильно перенаправляете параметры.

InflateInput<DeflateInput<File>> inflate1(0, File{"filename"}, 9, 0);

Вызывает конструктор

template<typename ...Args>
InflateInput(int header, Args ...args) : source(args...) {}

, где Args... равно File, int, int. Поскольку у args... есть имя, целые пачки являются lvalue, но ваш DeflateInput принимает только rvalue ссылку на File из

DeflateInput(T &&stream, int level, int header) : source(std::move(stream)) {}

. Самый простой способ - вызвать std::move args, как

InflateInput(int header, Args ...args) : source(std::move(args)...) {}

, но на самом деле вы должны использовать пересылку ссылок вместе с std::forward для полной пересылки всех параметров. Это изменит конструктор на

InflateInput(int header, Args&& ...args) : source(std::forward<Args>(args)...) {}
6
задан Sophie Alpert 21 February 2009 в 04:49
поделиться

3 ответа

iPhone не поддерживает динамическое подключение встроенных платформ. В то время как Вы смогли обманывать средство моделирования для работы, оно не будет работать над устройством. Если Вы хотите использовать код, необходимо создать статическую библиотеку для платформы (libpldatabase.a) и затем связать их с приложением.

GUI XCode не обеспечивает хороший интерфейс для статического подключения, необходимо будет добавить соответствующие флаги в сборке prefs (-lpldatabase-L/whatever/dir/it/is/in).

10
ответ дан 8 December 2019 в 04:56
поделиться

РЕ @mipadi: ZeroLink был удален в Xcode 3.1 и не существует для iPhone SDK. Корректным ответом является Louis; iPhone не поддерживает динамично загруженные платформы в созданных разработчиками приложениях.

XCode действительно имеет хороший пользовательский интерфейс для статических библиотек; просто перетащите их в проект, и они добавляются к фазе ссылки. Никакая потребность носиться с флагами компоновщика. Проблема возникает, когда необходимо использовать заголовки, предоставленные статичными, освобождает (затем, необходимо добавить пути поиска заголовка вручную), или когда статический lib конфликтует с доступным dylib (именно тогда, необходимо добавить флаг-l вручную).

6
ответ дан 8 December 2019 в 04:56
поделиться

Это не на самом деле строго верно, что iPhone не поддерживает динамическое подключение. То, что верно, - то, что приложения, установленные App Store, не могут динамично связаться.

App Store / ituned устанавливает программы в/private/var/mobile/... каталог. Любая программа открылась, который живет в том подкаталоге, chrooted и имеет определенные права, снятые при открытии. Процессы chrooted не могут разветвиться, они не могут работать в фоновом режиме, они не могут загрузить динамические библиотеки, и они не могут сохранить файлы за пределами своих небольших защищенных областей диска (за исключением фотографий к фото каталогу).

Тем не менее iPhone выполняет современную операционную систему, которая поддерживает динамическое подключение очень хорошо. Действие 'джейлбрекинга' на самом деле устанавливает программу за пределами chroot тюрьмы, которая может затем сделать вещи как ветвление и сохранить файлы к другим местам на диске и загрузить динамический код.

Apple (и открытое сообщество iPhone) имеет много программ, работающих по телефону (таких как MobilePhone, Мобильный Safari и приложения SpringBoard), который может работать в фоновом режиме и загрузить библиотеки. Они размещаются в другое место на диске (/private/var/stash/Applications часто).

Так..., если Вы хотите продать свое приложение в App Store, Вы не можете загрузить динамическую библиотеку. Который для большинства людей подразумевает, что Вы не можете загрузить его вообще. Но если Вы хотите распределить свое приложение через Cydia (общий взломанный установщик телефонного приложения), затем можно сойти с рук джейлбрекинг телефона и загрузка динамической библиотеки. На самом деле, из-за iTunes устанавливают процесс, являющийся преступником, как Вы узнали, Вы наклоняете равномерную нагрузку dylib из Вашего собственного приложения, что Вы пишете в Вас собственный телефон..., если Вы не перепрошиваете.

8
ответ дан 8 December 2019 в 04:56
поделиться