Обтекание библиотеки C ++ в XCode - PullRequest
2 голосов
/ 14 сентября 2011

Мне нужна помощь с переносом библиотек C ++ в XCode.

Чего я хочу добиться - это создать новую библиотеку в XCode, импортировать библиотеку C ++ (у меня есть файлы .a и .h), обернуть ее в Obj-C, чтобы я мог импортировать эту библиотеку в MonoTouch.

Причина, по которой я это делаю, заключается в том, что когда я пытаюсь импортировать C ++ lib в MonoTouch, из-за искажения имени я продолжаю получать исключения WrongEntryPoint. Поправьте меня, если я ошибаюсь, но я не могу найти искаженные имена, которые зависят от компилятора.

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011

Я бы определенно рекомендовал пойти по пути упаковки библиотеки в библиотеку Obj-C и использовать btouch для импорта библиотеки в MonoTouch.Я недавно сделал это для библиотеки C ++, которая реализовала ядро ​​базы данных Sybase.Если вы посмотрите на мои вопросы, вы найдете немало относящихся к обертке библиотек C ++, поскольку я несколько раз писал о проблемах, с которыми столкнулся.

В частности, вы можете посмотреть на следующие вопросы:

Связывание с собственной библиотекой C ++ в MonoTouch

Упаковка библиотеки C ++ в Objective-C не скрывает символы C ++

Приложение со статической библиотекой запускается на симуляторе, но не на реальном устройстве

Неопределенные символы при связывании статической PhoneGapбиблиотека в MonoTouch

Параметры компоновщика «Связать все сборки» и «Только ссылки SDK сборок» вызывают неопределенные символы в статической библиотеке сторонних производителей

Я бы также рекомендовалЕсли вы собираетесь пойти по пути обертки Obj-C, то вы получите btouch для вывода кода и включите его в свой проект вместо включения DLL из btouch. По моему опыту, код работал более надежно, чем DLL,хотя проблемы с dll, возможно, уже решены, но взгляните на этот вопрос, касающийся проблемы btouch:

Exception System.InvalidCastExceptionпри вызове метода, связанного с btouch, который возвращает объект.Ошибка MonoTouch?

Если у вас есть конкретные вопросы / проблемы при создании оболочки Obj-C, задайте их здесь и опубликуйте некоторый код, и я уверен, что я или другие члены сообщества сможемпомочь вам с этим.

2 голосов
/ 14 сентября 2011

Поправьте меня, если я ошибаюсь, но я не могу найти искаженные имена, которые зависят от компилятора.

Технически, вы могли бы.Многие компиляторы имеют одинаковый искажающий синтаксис , возможно, самый полезный и длительный подарок от Itanium ;-)

Однако это принесет свою собственную боль (например, непримитивные типы, другие компиляторы) и вопросы обслуживания при обновлении кода C ++.

Вам будет лучше:

  • написание оболочки ObjectiveC и использование инструмента MonoTouch btouch для создания привязок;

  • написание C оболочки и использование .NET p / invoke для вызова вашего кода;

Выбор за вамино если вы подумаете о повторном использовании кода C ++ / C # в другом месте (например, Mono для Android), тогда можно будет использовать C и p / invoke.

1 голос
/ 16 сентября 2011

Брюс, как ты и предполагал, у меня проблемы с переносом кода на C ++.После долгих часов чтения и попыток я не смог обернуть код C ++.

В любом случае мне удалось создать простую библиотеку Obj-C, сделанную из некоторого фиктивного класса, а затем импортировать ее в другую библиотеку.Это работало нормально.Однако, следуя той же схеме, я включил файл C ++ .a вместе с файлом .h (я не уверен, является ли .h обязательным, потому что мы можем связать файлы заголовков в опциях сборки, верно ??), и когда я его скомпилировал, он пошелхорошо, сборка прошла успешно, но XCode не создал новую библиотеку .a.

Я добавил флаги компоновщика: -ObjC -lNameOfLib Должен ли тип стандартной библиотеки C ++ при сборке - связывание должно быть статическим?И символы, скрытые по умолчанию?

Было бы здорово, если бы мы могли писать пошаговые инструкции, так как существует множество различных инструкций, но я не смог протолкнуть их до конца.

Я немного запутался ..

Спасибо, ребята ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...