Tôi có một dự án Haskell nhằm tạo ra một số ràng buộc C++. Tôi đã viết trình bao bọc C và biên dịch chúng thành một thư viện liên kết tĩnh độc lập.Kết nối tĩnh một thư viện C với thư viện Haskell
Tôi muốn viết các ràng buộc Haskell để liên kết tĩnh với trình bao bọc C sao cho tôi không phải phân phối trình bao bọc C một cách riêng biệt nhưng dường như tôi không thể làm việc đó và sẽ đánh giá cao một số trợ giúp.
Tôi chỉ định thư viện C làm thư viện bổ sung nhưng bước cabal build
của tôi dường như không thêm nó vào lệnh biên dịch.
Tôi đã tạo một dự án nhỏ để minh họa điều này (http://github.com/deech/CPlusPlusBindings).
Nó chứa một lớp C++ nhỏ (https://github.com/deech/CPlusPlusBindings/tree/master/cpp-src), trình bao bọc C (https://github.com/deech/CPlusPlusBindings/tree/master/c-src), thường trình kiểm tra C hoạt động (https://github.com/deech/CPlusPlusBindings/tree/master/c-test) và tệp Haskell (https://github.com/deech/CPlusPlusBindings/blob/master/src/BindingTest.chs).
Thư viện C được thêm vào trong Setup.hs không có trong tệp Cabal vì đó là cách tôi có dự án thực sự của tôi, xây dựng thư viện C bằng cách sử dụng "make" thông qua Cabal ngay trước khi buildf. Tôi đã xác minh rằng ở bước xây dựng phần extraLibs
của BuildInfo
chứa tên thư viện và extraLibDirs
chứa đúng thư mục.
Kết quả của cabal build
của tôi là:
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
Đáng tiếc là không phải biên soạn cũng không phải là bước nối sử dụng thư viện C. Không có cảnh báo hoặc lỗi khác.