Подтвердить что ты не робот

Я хотел бы использовать программу командной строки UNIX (Berkeleys SPICE) в приложении iOS. Каков процесс его компиляции в полезную библиотеку?

Я пытаюсь использовать инструмент Berkeley SPICE в приложении iOS, но у меня проблема с компиляцией его для iOS.

Это программа командной строки, которую я могу вызвать из терминала, например:

./spice3f5 <arguments>

Что хорошо работает, и я хотел бы использовать эту функцию в своем приложении iOS, но я не думаю, что могу просто скопировать исполняемый файл на Xcode и вызвать его из Swift.

Я провел некоторое исследование и нашел следующее:

  • Существует обновленная версия SPICE под названием ngspice, которая является относительно новой (выпуск 2014)
  • Я уверен, что там есть приложения, которые использовали либо SPICE, либо ngspice, поэтому я уверен, что это можно сделать как-то.
  • Я прочитал статью о парне, который говорит, что ngspice был скомпилирован как общая библиотека (ctrl + f "ngspice" ), и он сделал с ним приложение. Я отправил его по электронной почте, но он, к сожалению, не ответил.

Причина, по которой я спрашиваю здесь, заключается в том, что когда googling для "ngspice iOS", я натолкнулся на этот поток, в котором много умных людей пытаясь скомпилировать статическую библиотеку, которая, кажется, выходит из моей сферы. Я узнал, что динамические библиотеки разрешены с iOS8. Так что было бы проще скомпилировать *.dylib, чем статическую библиотеку?

Как я мог бы использовать ngspice или SPICE в приложении iOS?

Спасибо

4b9b3361

Ответ 1

Разница между статической и динамической библиотекой в ​​основном там, где они живут, статичная библиотека будет жить внутри двоичного файла вашего приложения, а динамическая библиотека будет жить в системе (iPhone), которая запускает ваше приложение. нет большой разницы, насколько трудно. Если вы хотите перейти на динамический маршрут на os x, например, вы можете сначала скомпилировать файл .dylib в отдельный проект. Затем скопируйте свой новый .dylib файл в /usr/lib или аналогичное местоположение, которое является частью вашего системного пути. Затем вам нужно будет скопировать связанные файлы заголовков, которые знают, как разговаривать с вашим новым файлом .dylib в вашей папке /usr/include. На этом этапе вы можете импортировать указанные файлы заголовков в xcode с помощью угловых скобок, например:

#import <my_dylib_header_file.h>

в статическом мире, однако, вы просто перетащите свой файл .dylib в xcode, затем скопируйте связанные файлы заголовков в исходную папку и затем импортируете с помощью кавычек следующим образом:

#import "my_dylib_header_file.h"

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

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

Однако, исходя из ваших вопросов, я не думаю, что что-то из этого имеет значение для вашего проекта. У вас есть исходный код. Это означает, что создание dylib совершенно не нужно для вашей цели, вы можете рассматривать исходный код как статическую библиотеку, просто добавляя его в свой проект xcode. Если бы я был вами, я бы добавил исходный код spice к моему проекту xcode и забыл о создании dylib. Оттуда я импортировал файлы и делал бы звонки им из swift. Есть много потоков, которые объясняют, как вызовы c-функций или классы objective-c от swift, поэтому я не буду вдаваться в это здесь, вместо этого я отсылаю вас к другому ответу: Swift: Как вызвать функцию C, загруженную из dylib