Я неделями пытался заставить Microsoft Visual Studio 2010 создать для меня DLL с помощью SWIG. Если вы уже прошли этот процесс, не могли бы вы дать подробное пошаговое объяснение процесса? Я искал повсюду в Интернете и потратил много-много часов, пытаясь сделать это; но все учебные пособия, которые я нашел, устарели или плохо объяснены.

Мне удалось пройти через этот процесс с помощью cygwin; но, как некоторые из вас знают, библиотека cygwin не очень практична.

В результате у меня есть файлы .i, .cpp и .h, которые, как я знаю, могут вместе создавать DLL. Мне просто нужно знать, как это сделать с помощью Visual Studio C ++ 2010. Я ориентируюсь на Python.

22
user1449530 27 Июл 2012 в 21:50

1 ответ

Лучший ответ

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

Изменить 19.08.2012 : если вы начинаете с примера на C, не используйте -c++ на шаге 13 и используйте .c вместо .cxx для переноса. расширение файла на шагах 14 и 19.

  1. Запустите Visual Studio 2010
  2. Файл, новый, проект из существующего кода ...
  3. Выберите тип проекта «Visual C ++» и нажмите «Далее».
  4. Введите расположение файла проекта, в котором находятся файлы .cpp / .h / .i.
  5. В качестве имени проекта выберите имя, используемое в операторе% module в вашем файле .i (регистр имеет значение).
  6. Выберите тип проекта «Проект динамически подключаемой библиотеки (DLL)» и нажмите «Далее».
  7. Добавьте к включенным путям поиска путь к файлу Python.h, обычно что-то вроде «C: \ Python27 \ include», и нажмите «Далее».
  8. Щелкните Готово.
  9. Щелкните правой кнопкой мыши проект в обозревателе решений, «Добавить», «Существующий элемент ...» и выберите свой файл .i.
  10. Щелкните правой кнопкой мыши файл .i, "Свойства" и выберите "Конфигурация" Все конфигурации ".
  11. Измените тип элемента на «Custom Build Tool» и нажмите «Применить».
  12. Выберите «Custom Build Tool» в свойствах (он появится после «Применить» выше).
  13. Введите командную строку «swig -c ++ -python -outdir $ (Outdir)% (Identity)» (предполагается, что SWIG находится на вашем пути, и при необходимости перенаправляет сгенерированный файл .py в каталог Debug или Release).
  14. В поле «Вывод» введите «% (Имя файла) _wrap.cxx; $ (Outdir)% (Имя файла) .py».
  15. Щелкните ОК.
  16. Щелкните правой кнопкой мыши файл .i и выберите «Скомпилировать».
  17. Щелкните проект правой кнопкой мыши, «Добавить», «Новый фильтр», назовите его «Созданные файлы».
  18. Щелкните правой кнопкой мыши «Созданные файлы», выберите «Свойства» и установите для «Файлы SCC» значение «Ложь» (если вы используете систему управления версиями, это предотвращает попытку VS2010 проверить сгенерированные файлы в этом фильтре).
  19. Щелкните правой кнопкой мыши «Созданные файлы», «Добавить», «Выход из элемента» и выберите файл _wrap.cxx, созданный при компиляции.
  20. Щелкните проект правой кнопкой мыши, "Свойства".
  21. Выберите конфигурацию «Все конфигурации».
  22. Выберите «Свойства конфигурации», «Компоновщик», «Общие», «Дополнительные каталоги библиотек» и добавьте путь к библиотекам Python, обычно «C: \ Python27 \ libs».
  23. Выберите Configuration Properties, General и установите TargetName равным «_ $ (ProjectName)».
  24. Установите для целевого расширения значение «.pyd».
  25. Соберите «Релизную» версию проекта. Вы не можете создать отладочную версию, если не создадите отладочную версию самого Python.
  26. Откройте консоль, перейдите в каталог Release проекта, запустите python, импортируйте свой модуль и вызовите функцию!
55
Mark Tolonen 19 Авг 2012 в 19:24
Спасибо, Марк, за то, что избавил меня (и, вероятно, многих других) от необходимости найти этот процесс методом проб и ошибок! Мне пришлось добавить в «Свойства проекта >> Каталоги VC ++ >> Каталоги включения» мой C: \ Python27 \ include; а в остальном все заработало как мечта! Кстати, я использовал Microsoft Visual C ++ Express; но процесс, очевидно, тот же.
 – 
user1449530
31 Июл 2012 в 23:26
1
- отличный пост, не могли бы вы распространить его на случай, когда у вас есть существующая DLL?
 – 
Shmil The Cat
30 Июл 2013 в 13:36
Стоит отметить, что SWIG не будет работать с 64-битной версией Python. Вместо этого используйте 32-битную версию.
 – 
odedfos
29 Сен 2013 в 18:15
1
Не правда. Он отлично работает с 64-битной версией. Это основной способ, которым я его использую. Любые упаковываемые библиотеки DLL также должны быть 64-разрядными.
 – 
Mark Tolonen
29 Сен 2013 в 18:32
2
В Visual Studio 2017 для файлов .i нельзя щелкнуть правой кнопкой мыши параметр «Скомпилировать». Обратите внимание, что вам не нужно выполнять какую-либо настраиваемую компиляцию файлов .i из Visual Studio. Вы можете просто сначала вызвать swig из оболочки, а затем вручную добавить сгенерированный _wrap.c / .cpp в свой проект Visual Studio.
 – 
delrocco
10 Фев 2018 в 05:31