Ticket #1883 (new bug)
GHC can't find library using "short" name
| Reported by: | m4dc4p | Owned by: | |
|---|---|---|---|
| Priority: | lowest | Milestone: | 7.6.2 |
| Component: | Compiler | Version: | 6.6.1 |
| Keywords: | link library windows | Cc: | |
| Operating System: | Windows | Architecture: | x86 |
| Type of failure: | None/Unknown | Difficulty: | Unknown |
| Test Case: | Blocked By: | #3658 | |
| Blocking: | Related Tickets: | #2283 #3242 #1883 #7097 |
Description
I wanted to build HDBC-postgresql 1.0.1[1] today, and ran into a problem where my test program would not load and instead gave this error:
can't load .so/.DLL for: pq (addDLL: unknown error)
I traced this to the 'extra-libraries' directive in the .cabal file. It read
Extra-Libraries: pq
When I changed it to
Extra-Libraries: libpq
The error went away. Somehow "pq" is not enough to get "libpq.dll" loaded.
Note that building on Windows required some other changes.[2]
This was using Cabal 1.1
[1] http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-postgresql-1.0.1.0
[2] From http://software.complete.org/hdbc/wiki/FrequentlyAskedQuestions
To build on Windows, you must specify where the postgresql include and library files are. Follow these two steps:
- Ensure the files are NOT installed in a directory with spaces in the name (e.g. "C:\Program Files"). For example, install them in c:\pgsql.
- Assuming postgresql is installed in C:\pgsql, add the following information to the .cabal file:
include-dirs: C:\pgsql\include, C:\pgsql\include\server, . extra-lib-dirs: C:\pgsql\binNotice the "." at the end of include-dirs to ensure the current directory is also searched. Also notice "bin" directory is specified in "extra-lib-dirs." This is important in the next step. - HDBC-postgresl depends on "libpa.dll" in the bin directory above. The .cabal file refers to the "pq", but that doesn't work on Windows. Change it to libpq like so:
Extra-Libraries: libpq
