[Haskell-beginners] Error Message: Can not find C library. How can I do this?
Edgar Klerks
edgar.klerks at gmail.com
Fri Mar 1 19:42:01 UTC 2019
You made a small typo:
example_dll.cpp, example_dll.dll, example_dll.h, example_dll.o,
example_exe.cpp, *libexample_dll.a*
And in your code, you call it example_dll.a instead of libexample_dll.a:
>
> extra-libraries:
> - example_dll.a
>
That should probably be:
extra-libraries:
- libexample_dll.a
On Tue, Feb 26, 2019 at 7:48 AM S. H. Aegis <shaegis at gmail.com> wrote:
> Hello.
>
> I’m new to stack & FFI.
>
> I created a dll file by http://www.mingw.org/wiki/sampleDLL
>
> And I put all files into dll folder. (Those files are example_dll.cpp,
> example_dll.dll, example_dll.h, example_dll.o, example_exe.cpp,
> libexample_dll.a) I test example_exe.exe file, and confirmed that works.
>
> (Windows7 Pro, stack 1.9.3)
>
> <package.yaml>
>
> executables:
>
> test2-exe:
>
> main: Main.hs
>
> source-dirs: app
>
> ghc-options:
>
> - -threaded
>
> - -rtsopts
>
> - -with-rtsopts=-N
>
> dependencies:
>
> - test2
>
> extra-libraries:
>
> - example_dll.a
>
> extra-lib-dirs:
>
> - dll
>
> <stack.yaml>
>
> # Extra directories used by stack for building
>
> extra-include-dirs:
>
> - dll
>
> extra-lib-dirs:
>
> - dll
>
> <Main.hs>
>
> {-# LANGUAGE ForeignFunctionInterface #-}
>
>
>
> module Main where
>
>
>
> -- import Lib
>
> import Foreign
>
>
>
> foreign import ccall "example_dll.h hello"
>
> c_hello :: IO()
>
>
>
> main :: IO ()
>
> main = c_hello
>
> <example_dll.cpp>
>
> #include <stdio.h>
>
> #include "example_dll.h"
>
>
>
> __stdcall void hello(const char *s)
>
> {
>
> printf("Hello %s\n", s);
>
> }
>
> int Double(int x)
>
> {
>
> return 2 * x;
>
> }
>
> void CppFunc(void)
>
> {
>
> puts("CppFunc");
>
> }
>
> void MyClass::func(void)
>
> {
>
> puts("MyClass.func()");
>
> }
>
>
>
> When I try to stack build, I get error messages.
>
>
>
> *C:\Users\shaegis\Documents\Haskell\test2\dll>stack build*
>
> *Building all executables for `test2' once. After a successful build of
> all of them, only specified executables will be rebuilt.*
>
> *test2-0.1.0.0: configure (lib + exe)*
>
> *Configuring test2-0.1.0.0...*
>
> *Cabal-simple_Z6RU0evB_2.4.0.1_ghc-8.6.3.exe: Missing dependency on a
> foreign*
>
> *library:*
>
> ** Missing (or bad) C library: example_dll.a*
>
> *This problem can usually be solved by installing the system package that*
>
> *provides this library (you may need the "-dev" version). If the library
> is*
>
> *already installed but in a non-standard location then you can use the
> flags*
>
> *--extra-include-dirs= and --extra-lib-dirs= to specify where it is.If the*
>
> *library file does exist, it may contain errors that are caught by the C*
>
> *compiler at the preprocessing stage. In this case you can re-run
> configure*
>
> *with the verbosity flag -v3 to see the error messages.*
>
>
>
> *-- While building package test2-0.1.0.0 using:*
>
> *
> C:\sr\setup-exe-cache\x86_64-windows\Cabal-simple_Z6RU0evB_2.4.0.1_ghc-8.6.3.exe
> --builddir=.stack-work\dist\e626a42b configure
> --with-ghc=C:\Users\shaegis\AppData\Local\Programs\stack\x86_64-windows\ghc-8.6.3\bin\ghc.EXE
> --with-ghc-pkg=C:\Users\shaegis\AppData\Local\Programs\stack\x86_64-windows\ghc-8.6.3\bin\ghc-pkg.EXE
> --user --package-db=clear --package-db=global
> --package-db=C:\sr\snapshots\3233b5e2\pkgdb
> --package-db=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\pkgdb
> --libdir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\lib
> --bindir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\bin
> --datadir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\share
> --libexecdir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\libexec
> --sysconfdir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\etc
> --docdir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\doc\test2-0.1.0.0
> --htmldir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\doc\test2-0.1.0.0
> --haddockdir=C:\Users\shaegis\Documents\Haskell\test2\.stack-work\install\784ab3f0\doc\test2-0.1.0.0
> --dependency=base=base-4.12.0.0
> --extra-include-dirs=C:\Users\shaegis\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\include
> --extra-include-dirs=C:\Users\shaegis\Documents\Haskell\test2\dll
> --extra-lib-dirs=C:\Users\shaegis\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\bin
> --extra-lib-dirs=C:\Users\shaegis\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\lib
> --extra-lib-dirs=C:\Users\shaegis\Documents\Haskell\test2\dll
> --enable-tests --enable-benchmarks*
>
> *Process exited with code: ExitFailure 1*
>
>
>
> How can I fix this? I did a lot of things on the webpages, but I could not.
>
> Please, help me.
>
>
>
> Sincerely, S. Chang.
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20190301/a7d4fe5d/attachment-0001.html>
More information about the Beginners
mailing list