Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: Linking C++ in Cabal (Leonhard Applis) ---------------------------------------------------------------------- Message: 1 Date: Wed, 27 May 2020 06:55:50 +0000 From: Leonhard Applis <leonhard.app...@protonmail.com> To: "beginners@haskell.org" <beginners@haskell.org> Subject: Re: [Haskell-beginners] Linking C++ in Cabal Message-ID: <wZ5Z6FFfCV2iYZ7UI_64ri_TpEiUVI9uHO5JmiIMiVNPy3UH0Xhd4Ydub0dvmOpt_yUPiH2dHilBCUkYnmv7cAdI1CzHTEWSbHRDpiwuC-I=@protonmail.com> Content-Type: text/plain; charset="utf-8" Thanks Toz! Works like a charm. Repository is updated for anyone interested. Beginners Mailing list is the best <3 ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ On Tuesday, May 26, 2020 10:01 PM, <beginners-requ...@haskell.org> wrote: > Send Beginners mailing list submissions to > beginners@haskell.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > or, via email, send a message with subject or body 'help' to > beginners-requ...@haskell.org > > You can reach the person managing the list at > beginners-ow...@haskell.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Beginners digest..." > > Today's Topics: > > 1. Re: Linking C++ in Cabal (鲍凯文) > > > Message: 1 > Date: Tue, 26 May 2020 13:03:13 -0700 > From: 鲍凯文 traqueofzi...@gmail.com > To: beginners@haskell.org > Subject: Re: [Haskell-beginners] Linking C++ in Cabal > Message-ID: > camjcg+fisqcazdrv14hut7qs1-37tyhxptzg2prnh7-90as...@mail.gmail.com > Content-Type: text/plain; charset="utf-8" > > Hi, > > So I tried it out, and there're a couple of things: > > - Declaring a function as `static` will hide it from anything other than > the current translation unit, AFAIK, which means that you won't be able to > link it to anything else; the symbol won't be visible (you can verify > using > `objdump`). > > - For C++ functions, you need to suppress name-mangling since Haskell's FFI > doesn't know about that. With your repo as is, the symbol corresponding to > the `multiply` function is not...`multiply`: > > > > dist-newstyle/build/x86_64-linux/ghc-8.6.5/HaskellForeignCPP-0.0.1/build/cpp-src/some.o: > file format elf64-x86-64 > > SYMBOL TABLE: > 0000000000000000 l df *ABS* 0000000000000000 some.cpp > 0000000000000000 l d .text 0000000000000000 .text > 0000000000000000 l d .data 0000000000000000 .data > 0000000000000000 l d .bss 0000000000000000 .bss > 0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack > 0000000000000000 l d .eh_frame 0000000000000000 .eh_frame > 0000000000000000 l d .comment 0000000000000000 .comment > 0000000000000000 g F .text 0000000000000006 _Z8multiplyii > > > so you just need to wrap every exposed function in `extern "C"` blocks, > like it's explained here: https://www.geeksforgeeks.org/extern-c-in-c/. > > With `extern "C"` and removing `static`: > > > dist-newstyle/build/x86_64-linux/ghc-8.6.5/HaskellForeignCPP-0.0.1/build/cpp-src/some.o: > file format elf64-x86-64 > > SYMBOL TABLE: > 0000000000000000 l df *ABS* 0000000000000000 some.cpp > 0000000000000000 l d .text 0000000000000000 .text > 0000000000000000 l d .data 0000000000000000 .data > 0000000000000000 l d .bss 0000000000000000 .bss > 0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack > 0000000000000000 l d .eh_frame 0000000000000000 .eh_frame > 0000000000000000 l d .comment 0000000000000000 .comment > 0000000000000000 g F .text 0000000000000006 multiply > > > ...and everything builds fine. > > Best, > > toz > > On Tue, May 26, 2020 at 5:03 AM beginners-requ...@haskell.org wrote: > > > Send Beginners mailing list submissions to > > beginners@haskell.org > > To subscribe or unsubscribe via the World Wide Web, visit > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > or, via email, send a message with subject or body 'help' to > > beginners-requ...@haskell.org > > You can reach the person managing the list at > > beginners-ow...@haskell.org > > When replying, please edit your Subject line so it is more specific > > than "Re: Contents of Beginners digest..." > > Today's Topics: > > > > 1. Re: Linking C++ in Cabal - repository Link (Leonhard Applis) > > 2. Re: Linking C++ in Cabal (鲍凯文) > > > > Message: 1 > > Date: Mon, 25 May 2020 13:00:03 +0000 > > From: Leonhard Applis leonhard.app...@protonmail.com > > To: "beginners@haskell.org" beginners@haskell.org > > Subject: Re: [Haskell-beginners] Linking C++ in Cabal - repository > > Link > > Message-ID: > > <iF7eLvkM4HniAVDyO09U-O3y48pPEAciKs5zjKAtajj8lldf1g8Tp5UHi3-HiT2GMc15GBi5JgVgkRXr4KQ8Y8p6i0CuuAU-RLh-g2t57uQ=@ > > protonmail.com> > > Content-Type: text/plain; charset="utf-8" > > Ups, in my mailing list the links have disappeared. > > Just in case: > > The minimal reproducing repository: > > https://github.com/Twonki/HaskellForeingCPPMinimal > > The repository from Aditya Siram with C and makefile: > > https://github.com/deech/CPlusPlusBindings > > best > > Leonhard > > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ > > On Monday, May 25, 2020 2:00 PM, beginners-requ...@haskell.org wrote: > > > > > Send Beginners mailing list submissions to > > > beginners@haskell.org > > > > > To subscribe or unsubscribe via the World Wide Web, visit > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > or, via email, send a message with subject or body 'help' to > > > beginners-requ...@haskell.org > > > > > You can reach the person managing the list at > > > beginners-ow...@haskell.org > > > > > When replying, please edit your Subject line so it is more specific > > > than "Re: Contents of Beginners digest..." > > > > > Today's Topics: > > > > > 1. Linking C++ in Cabal (Leonhard Applis) > > > > > > > > > > Message: 1 > > > Date: Sun, 24 May 2020 16:30:22 +0000 > > > From: Leonhard Applis leonhard.app...@protonmail.com > > > To: "beginners@haskell.org" beginners@haskell.org > > > Subject: [Haskell-beginners] Linking C++ in Cabal > > > Message-ID: > > > > 51wOfngyX74dYjJRw6hibqw07vGHvvSYPD_f3f2-_F7hG0k0GwWf2Xv4g7LyeZNyn_vR28s6GIbd3e-78_TapNIEo_tJZ-2fTViOmkQYOnM=@ > > protonmail.com > > > > > > > > > > Content-Type: text/plain; charset="utf-8" > > > > > Hello, > > > > > I want to use a foreign C++ Function in a Haskell Library, and the > > > Library in a Haskell Program. > > > The C++ function is separate in a file and I have a header file. > > > I made a minimal reproducing repository. > > > > > The closes I have found is this repository which wraps the c++ in c and > > > makes a full library, needing a makefile etc. > > > So while I think I'd get it working like that, it looks to be quite a > > > lot to do for my simple task. > > > > > the repository structure looks as follows: > > > > > Projekt > > > > > - cpp-src > > > - some.cpp > > > - some.h > > > - lib-src > > > - CPPLib.hs > > > - program-src > > > - program.hs > > > - project.cabal > > > > > And my (currently failing) project.cabal the following: > > > > > > > > cabal-version: 3.0 > > > name: cpp_lib > > > [...] > > > library > > > exposed-modules: CPPLib > > > other-extensions: ForeignFunctionInterface > > > build-depends: base > > > hs-source-dirs: lib-src > > > default-language: Haskell2010 > > > include-dirs: ./cpp-src > > > cxx-sources: ./cpp-src/some.cpp > > > install-includes: ./cpp-src/some.h > > > > > > > > executable CPPApp > > > main-is: program.hs > > > default-language: Haskell2010 > > > build-depends: HaskellForeignCPP, > > > base > > > hs-source-dirs: program-src > > > > > > > > The some.cpp is trivial for this case lets assume its a function > > > > > > > multiply :: Int -> Int -> Int, and both .cpp and .h are well-formed and > > don't have further dependencies. > > > > > > > > > > > > > > > The library compiles fine, but when building the executable it fails > > > telling me > > > > > collect2: error: ld returned 1 exit status > > > `gcc' failed in phase`Linker'. (Exit code: 1) > > > > > Can someone help me out? > > > I find very little documentation on this topic. > > > > > I know there is Inline-CPP which would help as well, but I just very > > > much like the idea of having a nice separate file and interface for > > > modularity. > > > > > best > > > Leonhard > > > -------------- next part -------------- > > > An HTML attachment was scrubbed... > > > URL: > > > http://mail.haskell.org/pipermail/beginners/attachments/20200524/9019cbc0/attachment-0001.html > > > -------------- next part -------------- > > > A non-text attachment was scrubbed... > > > Name: signature.asc > > > Type: application/pgp-signature > > > Size: 477 bytes > > > Desc: OpenPGP digital signature > > > URL: > > > http://mail.haskell.org/pipermail/beginners/attachments/20200524/9019cbc0/attachment-0001.sig > > > > > -- > > > > > Subject: Digest Footer > > > > > Beginners mailing list > > > Beginners@haskell.org > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > > > > > > > > > > > > > > > > > End of Beginners Digest, Vol 143, Issue 12 > > > > -------------- next part -------------- > > A non-text attachment was scrubbed... > > Name: signature.asc > > Type: application/pgp-signature > > Size: 477 bytes > > Desc: OpenPGP digital signature > > URL: < > > http://mail.haskell.org/pipermail/beginners/attachments/20200525/0e889731/attachment-0001.sig > > > > > > > > > Message: 2 > > Date: Mon, 25 May 2020 16:45:09 -0700 > > From: 鲍凯文 traqueofzi...@gmail.com > > To: beginners@haskell.org > > Subject: Re: [Haskell-beginners] Linking C++ in Cabal > > Message-ID: > > <CAMjcG+FWPZtkM7soC34VOdSBQ+ArdWY2Bpk2Wm= > > xnqedg3o...@mail.gmail.com> > > Content-Type: text/plain; charset="utf-8" > > Hi, > > Would it be possible to upload your full repo somewhere so people could see > > everything and possibly reproduce this? > > Thanks, > > toz > > On Mon, May 25, 2020 at 5:03 AM beginners-requ...@haskell.org wrote: > > > > > Send Beginners mailing list submissions to > > > beginners@haskell.org > > > To subscribe or unsubscribe via the World Wide Web, visit > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > or, via email, send a message with subject or body 'help' to > > > beginners-requ...@haskell.org > > > You can reach the person managing the list at > > > beginners-ow...@haskell.org > > > When replying, please edit your Subject line so it is more specific > > > than "Re: Contents of Beginners digest..." > > > Today's Topics: > > > > > > 1. Linking C++ in Cabal (Leonhard Applis) > > > > > > Message: 1 > > > Date: Sun, 24 May 2020 16:30:22 +0000 > > > From: Leonhard Applis leonhard.app...@protonmail.com > > > To: "beginners@haskell.org" beginners@haskell.org > > > Subject: [Haskell-beginners] Linking C++ in Cabal > > > Message-ID: > > > > <51wOfngyX74dYjJRw6hibqw07vGHvvSYPD_f3f2-_F7hG0k0GwWf2Xv4g7LyeZNyn_vR28s6GIbd3e-78_TapNIEo_tJZ-2fTViOmkQYOnM=@ > > > > > protonmail.com> > > > Content-Type: text/plain; charset="utf-8" > > > Hello, > > > I want to use a foreign C++ Function in a Haskell Library, and the > > > Library > > > in a Haskell Program. > > > The C++ function is separate in a file and I have a header file. > > > I made a minimal reproducing repository. > > > The closes I have found is this repository which wraps the c++ in c and > > > makes a full library, needing a makefile etc. > > > So while I think I'd get it working like that, it looks to be quite a lot > > > to do for my simple task. > > > the repository structure looks as follows: > > > Projekt > > > > > > - cpp-src > > > > > > - some.cpp > > > > > > - some.h > > > > > > - lib-src > > > > > > - CPPLib.hs > > > > > > - program-src > > > > > > - program.hs > > > > > > - project.cabal > > > > > > > > > And my (currently failing) project.cabal the following: > > > cabal-version: 3.0 > > > name: cpp_lib > > > [...] > > > library > > > exposed-modules: CPPLib > > > other-extensions: ForeignFunctionInterface > > > build-depends: base > > > hs-source-dirs: lib-src > > > default-language: Haskell2010 > > > include-dirs: ./cpp-src > > > cxx-sources: ./cpp-src/some.cpp > > > install-includes: ./cpp-src/some.h > > > executable CPPApp > > > main-is: program.hs > > > default-language: Haskell2010 > > > build-depends: HaskellForeignCPP, > > > base > > > hs-source-dirs: program-src > > > The some.cpp is trivial for this case lets assume its a function multiply > > > :: Int -> Int -> Int, and both .cpp and .h are well-formed and don't have > > > further dependencies. > > > The library compiles fine, but when building the executable it fails > > > telling me > > > collect2: error: ld returned 1 exit status > > > `gcc' failed in phase`Linker'. (Exit code: 1) > > > Can someone help me out? > > > I find very little documentation on this topic. > > > I know there is Inline-CPP which would help as well, but I just very much > > > like the idea of having a nice separate file and interface for > > > modularity. > > > best > > > Leonhard > > > -------------- next part -------------- > > > An HTML attachment was scrubbed... > > > URL: < > > > > http://mail.haskell.org/pipermail/beginners/attachments/20200524/9019cbc0/attachment-0001.html > > > > > > > > > > > > -------------- next part -------------- > > > A non-text attachment was scrubbed... > > > Name: signature.asc > > > Type: application/pgp-signature > > > Size: 477 bytes > > > Desc: OpenPGP digital signature > > > URL: < > > > > http://mail.haskell.org/pipermail/beginners/attachments/20200524/9019cbc0/attachment-0001.sig > > > > > > > > > > > > Subject: Digest Footer > > > > > > Beginners mailing list > > > Beginners@haskell.org > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > > > End of Beginners Digest, Vol 143, Issue 12 > > > > -------------- next part -------------- > > An HTML attachment was scrubbed... > > URL: < > > http://mail.haskell.org/pipermail/beginners/attachments/20200525/002f0b3f/attachment-0001.html > > > > > > > > > Subject: Digest Footer > > > > Beginners mailing list > > Beginners@haskell.org > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > End of Beginners Digest, Vol 143, Issue 13 > > -------------- next part -------------- > An HTML attachment was scrubbed... > URL: > http://mail.haskell.org/pipermail/beginners/attachments/20200526/4607f2a5/attachment.html > > -- > > Subject: Digest Footer > > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > --------------------------------------------------------------------------------------------------------- > > End of Beginners Digest, Vol 143, Issue 14 -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 477 bytes Desc: OpenPGP digital signature URL: <http://mail.haskell.org/pipermail/beginners/attachments/20200527/e7f4e594/attachment-0001.sig> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 143, Issue 15 ******************************************