У меня есть проект Haskell, целью которого является создание некоторых привязок С++. Я написал обертки C и скомпилировал их в автономную статически связанную библиотеку.
Я хотел бы написать привязки Haskell, чтобы связать статически с обертками C, чтобы мне не пришлось распространять обертки C отдельно, но я не могу заставить их работать и будет благодарен за помощь.
Я указываю библиотеку C как дополнительную библиотеку, но мой шаг cabal build
, похоже, не добавляет ее в команду компиляции.
Я создал небольшой проект, чтобы проиллюстрировать это (http://github.com/deech/CPlusPlusBindings).
Он содержит небольшой класс С++ (https://github.com/deech/CPlusPlusBindings/tree/master/cpp-src), обертка C (https://github.com/deech/CPlusPlusBindings/tree/master/c-src), рабочий C-тест (https://github.com/deech/CPlusPlusBindings/tree/master/c-test) и файл Haskell (https://github.com/deech/CPlusPlusBindings/blob/master/src/BindingTest.chs).
Библиотека C добавлена в Setup.hs не в файле Cabal, так как у меня есть мой настоящий проект, который строит библиотеку C, используя "make" через Cabal непосредственно перед сборкой stepf. Я проверил, что на этапе сборки часть extraLibs
BuildInfo
содержит имя библиотеки, а extraLibDirs
содержит правильный каталог.
Выход моего cabal build
:
creating dist/setup
./dist/setup/setup build --verbose=2
creating dist/build
creating dist/build/autogen
Building CPlusPlusBinding-0.1.0.0...
Preprocessing library CPlusPlusBinding-0.1.0.0...
Building library...
creating dist/build
/usr/local/bin/ghc --make -fbuilding-cabal-package -O -odir dist/build -hidir dist/build -stubdir dist/build -i -idist/build -isrc -idist/build/autogen -Idist/build/autogen -Idist/build -I/home/deech/Old/Haskell/CPlusPlusBinding/c-src -I/home/deech/Old/Haskell/CPlusPlusBinding/cpp-includes -optP-include -optPdist/build/autogen/cabal_macros.h -package-name CPlusPlusBinding-0.1.0.0 -hide-all-packages -package-db dist/package.conf.inplace -package-id base-4.6.0.1-8aa5d403c45ea59dcd2c39f123e27d57 -XHaskell98 -XForeignFunctionInterface BindingTest
Linking...
/usr/bin/ar -r dist/build/libHSCPlusPlusBinding-0.1.0.0.a dist/build/BindingTest.o
/usr/bin/ar: creating dist/build/libHSCPlusPlusBinding-0.1.0.0.a
/usr/bin/ld -x --hash-size=31 --reduce-memory-overheads -r -o dist/build/HSCPlusPlusBinding-0.1.0.0.o dist/build/BindingTest.o
In-place registering CPlusPlusBinding-0.1.0.0...
/usr/local/bin/ghc-pkg update - --global --user --package-db=dist/package.conf.inplace
К сожалению, ни компиляция, ни шаг связывания не используют библиотеку C. Других предупреждений и ошибок нет.