Компиляция Quantlib через SWIG для C # - PullRequest
5 голосов
/ 26 июля 2010

У кого-нибудь есть опыт использования SWIG ?В настоящее время я исследую QuantLib и увидел, что код C # может быть сгенерирован с помощью SWIG.Мы изучаем варианты создания объединенной библиотеки финансовых функций с использованием QuantLib и проприетарной библиотеки с закрытым исходным кодом (которая, вероятно, будет доступна как .Net dll).Идея состоит в том, чтобы объединить оба этих элемента для создания единой супер-библиотеки.Я видел .Net порт QuantLib , но, похоже, он не поддерживается активно (и не совсем уверен, сколько фактически было портировано), поэтому я избегаю его.

Шаг 1 этого состоит в том, чтобы оценить сложность создания библиотеки, которую можно использовать «где угодно», то есть приложения MS Office (через VBA), консольные приложения, а также на стороне сервера (например, веб-приложения).Я предполагаю, что это связано с COM Interop, но я понятия не имею, с чего начать или я даже на правильном пути.

У меня нет опыта работы с C ++;и COM - кое-что (модное слово для меня в настоящее время), что я застеклил.Мне известны соответствующие статьи MSDN, связанные с этой темой.

Я ищу помощь по следующим направлениям:

  1. Существуют ли альтернативы использованию QuantLib в C #?
  2. Что касается моей среды разработки, что бы я хотелнеобходимость?
  3. Кто-нибудь знает о готовой к использованию библиотеке QuantLib C #, скомпилированной через SWIG?(первый приз = меньше работы для меня)

Любая помощь оценена?

Редактировать: Я принял свой ответ как правильный, если нет лучшего ответа.

1 Ответ

8 голосов
/ 16 сентября 2010

Так что казалось бы, что привязки C # для SWIG доступны. Нужно просмотреть репозиторий SVN или список файлов на SouceForge , чтобы найти их.

Папка SWIG содержит несколько подпапок, в зависимости от выбранного вами языка, в моем случае C # меня заинтересовал. Сначала вам нужно скачать SWIG, а это - переменная исполняемого файла для системы PATH.

Обязательно прочитайте Readme.txt, поскольку он содержит сведения о переменной окружения QL_DIR, которую также необходимо создать.

Это может быть ограничением VS Express, но файл решения содержит как проект C #, так и проект C ++, из которых в любой момент могут быть открыты только части C # или C ++. Я бы предложил создать отдельные файлы решений для проектов C ++ и C #.

Исходя из .Net-фона, lib-файлов, obj-файлов и всего прочего джаза, связанного с c ++, требуется некоторое время, чтобы привыкнуть.

Действия, предпринятые для получения работающей библиотеки C #

  1. Загрузите QuantLib и Boost, как описано здесь
  2. Загрузите tar-шар из папки QuantLib-SWIG из SourceForge . Редактировать: На главной странице доступна загрузка zip . Это указано в подпапках. Проверьте папки v1.0 под Bindings
  3. Запустите файл swig.cmd, расположенный в папке QuantLib-SWIG\CSharp (сначала необходимо загрузить SWIG () -> это создаст файлы оболочки cs для Quantlib.
  4. Сборка проекта c ++ NQuantLibc - обратите внимание, что созданная здесь dll должна всегда поставляться с dll, встроенной в NQuantlib C #. Он должен быть расположен в месте, доступном для чтения по атрибуту DLLImport. (См. Порядок поиска в библиотеке Dynamic-Link на MSDN для получения списка местоположений)
  5. Сборка проекта C # NQuantLib

Что мне нужно для среды разработки? Кажется, что текущая версия QuantLib собирается только с VS 2008. В VS 2010 произошли некоторые изменения, которые вызвали некоторые проблемы с компиляцией. Проект C # работает нормально, но не забывайте менять Target Framework с v4 на v3.5 и ниже.

Примечание. На момент написания этой статьи существовала проблема с номером QL_HEX_VERSION в исходных файлах проекта C ++ SWIG. После запуска swig.cmd откройте проект VS и измените строку 344 из quantlib_wrap.cpp на

#if QL_HEX_VERSION < 0x010001f0//0x010100f0

Я написал автору проекта и жду обратной связи. Редактировать: Луиджи, правильно сообщил мне, что это любая проблема с кодом в SVN (который я использовал). Он предложил использовать привязки QuantLib-SWIG-1.0.zip .

Quantlib также построен на VC ++ 2010 с последней версией.

...