[GHC] #9010: TemplateHaskell leads to an "unknown symbol" error
GHC
ghc-devs at haskell.org
Fri Dec 18 19:40:04 UTC 2015
#9010: TemplateHaskell leads to an "unknown symbol" error
-------------------------------------+-------------------------------------
Reporter: Feuerbach | Owner:
Type: bug | Status: closed
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Resolution: fixed | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by rwbarton):
* status: infoneeded => closed
* priority: high => normal
* version: 7.10.2 => 7.6.3
* resolution: => fixed
Comment:
Okay, that's helpful and different from how my package was built. I
managed to reproduce the error you saw by building an archive with an
undefined symbol reference and specifying it with `extra-libraries:` and
`extra-lib-dirs:` in `hs-opencv-binding.cabal`. (Of course, it's not a bug
that GHC fails when there really is an undefined symbol!)
It turns out that the GHC runtime linker is still used in the following
situation:
When loading a package into GHCi, the last step is to load libraries
specified in the `extra-libraries:` field of the package registration. For
each such library, GHCi will first try to find a matching shared library
in the library path, then try to find a matching static library in the
library path, then ask gcc where to find a shared library, and if all
those fail, assume that `dlopen` will know where to find the shared
library. (`compiler/ghci/Linker.hs`, function `locateLib`.) It is that
second case that you are apparently in (I guess you only built OpenCV as a
static library) and in that case the static library is loaded by the GHC
runtime linker (in `linkPackage` in the same file).
That is all fine, except that the GHC runtime linker apparently doesn't
understand this `"u"` symbol type. But that is almost certainly unrelated
to the original ticket here, so I reset the ticket status back to its
previous state.
I recommend that you simply use dynamic OpenCV libraries, if at all
possible. If not, you will apparently need support for this `"u"` symbol
type in the GHCi runtime linker. I'm not sure I understand exactly what
the semantics of this symbol type are supposed to be, but it looks fairly
straightforward to implement. However, that would obviously require a
patch to GHC... so it would probably be easier for you just to use dynamic
OpenCV libraries, and avoid the hairiness of the GHC runtime linker.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9010#comment:18>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list