Skip to content

GHC can't find library using "short" name

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:

  1. 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.
  2. 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\bin

Notice 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.

  1. 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

Trac metadata
Trac field Value
Version 6.6.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information