-fexternal-interpreter with external C shared library leads to undefined symbol during template haskell phase
I'm building the following Foo.hs program using the hmatrix-gsl library:
{-# LANGUAGE TemplateHaskell #-}
import Numeric.GSL.Integration
main = do
print $([| 10 |])
print $ integrateQNG 1 (\x -> x) 0 1
I observes undefined symbols during the template haskell phase when using -fexternal-interpreter:
Without -fexternal-interpreter:
$ ghc -package hmatrix-gsl Foo.hs
[1 of 1] Compiling Main ( Foo.hs, Foo.o )
Linking Foo ...
[nix-shell:~/bug_report_external]$ ./Foo
10
(0.5,5.551115123125783e-15)
But with -fexternal-interpreter:
$ ghc -fexternal-interpreter -package hmatrix-gsl Foo.hs
[1 of 1] Compiling Main ( Foo.hs, Foo.o )
<command line>: can't load .so/.DLL for: /nix/store/6dhcmmfgy5fa0p3d235yaz4qfx8jhpar-gsl-2.5/lib/libgsl.so (/nix/store/6dhcmmfgy5fa0p3d235yaz4qfx8jhpar-gsl-2.5/lib/libgsl.so: undefined symbol: cblas_ctrmv)
I suspect that it happen during the template haskell phase because I cannot observe this issue without template haskell.
I can observe this issue with a few other libraries, I used hmatrix-gsl in this example because it is on hackage. Actually, you can even reduce the file to:
{-# LANGUAGE TemplateHaskell #-}
main = do
print $([| 10 |])
and get the same error as long as you have -package hmatrix-gsl in your command line.
I generate the build environment with this nix file:
with import (fetchTarball {
# 25/01/2019
url = https://github.com/nixos/nixpkgs/archive/11cf7d6e1ff.tar.gz;
sha256 = "0zcg4mgfdk3ryiqj1j5iv5bljjvsgi6q6j9z1vkq383c4g4clc72";
}) {};
mkShell {
buildInputs = [(haskellPackages.ghcWithPackages(p: [p.hmatrix-gsl]))];
}
It setups ghc-8.6.3 with hmatrix-gsl-0.19.0.1 (the latest on hackage).
Note that hmatrix-gsl depends on library gsl which have a weird symbol setup. The main library file libgsl does not contain the cbal_ctrmv symbol which is contained in another library libgslcbal which is not a dependency of the shared object libgsl.so.
library gslcblas is listed in extra-libraries of the hmatrix-gsl package:
ghc-pkg field hmatrix-gsl extra-libraries
extra-libraries:
gsl gslcblas m
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |