[Haskell-cafe] strange link error

PICCA Frederic-Emmanuel frederic-emmanuel.picca at synchrotron-soleil.fr
Mon Jan 10 08:47:34 UTC 2022


Hello, I try to build a project which use C libraries.

during the developpement I want to link directly with the work in progress libraries.
So I added this in cabal.

executable binoculars-ng
  [...]

  if flag(useHklDev)
    pkgconfig-depends: gobject-2.0
    ghc-options: -pgml
    ghc-options: gcc
    ghc-options: "-optl-Wl,--allow-multiple-definition"
    ghc-options: "-optl-Wl,--whole-archive,../../hkl/.libs/libhkl.a,--no-whole-archive"
    ghc-options: "-optl-Wl,--whole-archive,../../binoculars/libhkl-binoculars.a,--no-whole-archive"

at the end I have a working executable.

Building executable 'binoculars-ng' for hkl-0.1.0.0..
[1 of 1] Compiling Main             ( app/Binoculars.hs, /home/experiences/instrumentation/picca/src/repo.or.cz/hkl/contrib/haskell/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hkl-0.1.0.0/x/binoculars-ng/build/binoculars-ng/binoculars-ng-tmp/Main.o )
Linking /home/experiences/instrumentation/picca/src/repo.or.cz/hkl/contrib/haskell/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hkl-0.1.0.0/x/binoculars-ng/build/binoculars-ng/binoculars-ng ...


But now I would like to create an unit test so I added this in  cabal

test-suite hkl-test
   [...]
  if flag(useHklDev)
    pkgconfig-depends: gobject-2.0
    ghc-options: -pgml
    ghc-options: gcc
    ghc-options: "-optl-Wl,--allow-multiple-definition"
    ghc-options: "-optl-Wl,--whole-archive,../../hkl/.libs/libhkl.a,--no-whole-archive"
    ghc-options: "-optl-Wl,--whole-archive,../../binoculars/libhkl-binoculars.a,--no-whole-archive"

but this time during the compilation I end up with this error message

[1 of 3] Compiling Paths_hkl        ( /home/experiences/instrumentation/picca/src/repo.or.cz/hkl/contrib/haskell/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hkl-0.1.0.0/t/hkl-test/build/hkl-test/autogen/Paths_hkl.hs, /home/experiences/instrumentation/picca/src/repo.or.cz/hkl/contrib/haskell/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hkl-0.1.0.0/t/hkl-test/build/hkl-test/hkl-test-tmp/Paths_hkl.o )
[2 of 3] Compiling BinocularsSpec   ( test/BinocularsSpec.hs, /home/experiences/instrumentation/picca/src/repo.or.cz/hkl/contrib/haskell/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hkl-0.1.0.0/t/hkl-test/build/hkl-test/hkl-test-tmp/BinocularsSpec.o )
<command line>: /home/experiences/instrumentation/picca/src/repo.or.cz/hkl/contrib/haskell/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hkl-0.1.0.0/build/libHShkl-0.1.0.0-inplace-ghc8.8.4.so: undefined symbol: hkl_binoculars_cube_free

both the executable  and the test  use this hkl_binoculars_cube_free function.

So are you aware of a difference between test suit and executable during the build.

more precisely are both  executables compiled differently ?

thanks for you help

Frederic




More information about the Haskell-Cafe mailing list