У меня есть проект Haskell, целью которого является создание некоторых привязок C++. Я написал обертки C и скомпилировал их в автономную статически связанную библиотеку.Статическая связь библиотеки C с библиотекой Haskell
Я хотел бы написать привязки Haskell, чтобы связать статически с обертками C, чтобы мне не пришлось распространять обертки C отдельно, но я не могу заставить его работать, и мне будет очень полезно помочь.
Я указываю библиотеку C как дополнительную библиотеку, но мой cabal build
шаг, похоже, не добавляет ее в команду компиляции.
Я создал небольшой проект, чтобы проиллюстрировать это (http://github.com/deech/CPlusPlusBindings).
Он содержит небольшой C++ класс (https://github.com/deech/CPlusPlusBindings/tree/master/cpp-src), С обертка (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. Других предупреждений и ошибок нет.