Ticket #701 (new enhancement)
Help packages to avoid linker symbol clashes
| Reported by: | duncan | Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | Cabal library | Version: | 1.6.0.3 |
| Severity: | normal | Keywords: | |
| Cc: | Difficulty: | unknown | |
| GHC Version: | Platform: |
Description
Currently it is all too easy to end up with silently clashing linker symbols.
The prime example is C code linked into a Haskell package. Multiple versions of the same package will define the same linker symbols. The system linker is happy to just pick the first occurrence of a symbol (though the ghci linker is stricter). This can cause havoc if the behaviour of the C code changes from one version of the package to another (see for example the problem with mmap and darcs, ticket #700).
There are a number of things we could do to improve the situation.
- We could make it easier to make versioned C symbols in the C code used in a Haskell package by providing cpp macros.
- We could explicitly check for unversioned C symbols in Haskell libs
- We could try linking Haskell libs in such a way that the C symbols are not visible and thus cannot clash, but it would also mean they are not exported for other libs to use.
Change History
Note: See
TracTickets for help on using
tickets.
