Да, я уже находил это и даже делал, но возникли некоторые проблемы.
Приведены функции:
- hello для вывода строчки;
- getCStringFromKey получить строчку из Haskell-окружения и вернуть её в С++;
- printCString - получить строчку из С++ и вывести её в Haskell окружении;
Если я провожу компиляцию при помощи ghc вручную, с использованием команд:
>ghc -c grepWrap.hs
>ghc -shared grepWrap.o
На выходе получаю файлы: HSdll.dll (размером 1 349 Кб) и HSdll.dll.a (размером 2 228 Кб). Ну и конечно header-файл.
В последующем я с легкостью использую эти файлы в моем проекте на MS Visual Studio.
В случае, если я использую сборку с использованием cabal'a:
Вот секция library:
library
exposed-modules: GrepWrap
build-depends: base ==4.6.*
Сборку осуществляю следующим набором команд:
>cabal configure --enable-shared
>cabal build
На выходе, помимо header-файла я получаю libHSsimpleCabal-0.1.0.0-ghc7.6.3.dll (48 Кб) и libHSsimpleCabal-0.1.0.0-ghc7.6.3.dll.a (41 Кб).
При использовании которых я получаю сл. ошибки:
1>SimpleCabalCPP.obj : error LNK2019: unresolved external symbol _hs_init referenced in function _main
1>SimpleCabalCPP.obj : error LNK2019: unresolved external symbol _hs_exit referenced in function _main
Проще говоря, они тянут за собой целый набор файлов.
Мне хотелось бы этого избежать и при помощи Cabal'a выполнить простройку dll полностью эквивалентную простройке dll при помощи ghc.
пятница, 6 июня 2014 г., 15:13:28 UTC+4 пользователь nponeccop написал: