On Wed, Jun 10, 2015 at 12:18 AM, Ranjit Jhala <jhala@cs.ucsd.edu> wrote:
Hi all,

I cannot build 'vector' (or 'cmdargs') with profiling on. 

The short answer is: Never use --ghc-options="-prof". Cabal knows to use -prof to build profiling libraries and profiled executables, and will handle everything correctly automatically. If you remove the "-prof" part from the --ghc-options in your original command, vector will build with profiling correctly.

The longer explanation is:

vector uses Template Haskell which can only load the dynamic, unprofiled version of a library. In order to build vector in any configuration, its dependencies therefore need to have been built in at least the dynamic & unprofiled configuration. vector itself must also be built in the dynamic & unprofiled configuration, in case one module in vector runs a Template Haskell containing identifiers defined in another module in vector.

Cabal is capable of building both the dynamic & unprofiled and static & profiled configurations of vector and its dependencies simultaneously by default. However, if you explicitly add --ghc-options=-prof, then you defeat Cabal's attempt to build the dynamic & unprofiled configuration.
 
specifically when I run:

    $ cabal install --enable-executable-profiling --enable-library-profiling --ghc-options="-O2 -rtsopts -prof -auto-all -caf-all" vector


I get the message:

    Perhaps you haven't installed the "p_dyn" libraries for package ‛integer-gmp’

Right, by default ghc does not ship with dynamic & profiled libraries, so this will fail very quickly when Cabal tries to build a dynamic & unprofiled library, but you told it to also pass -prof to ghc.
 
Per some advice I tried to add the '--disable-shared' 


    $ cabal install --disable-shared --enable-executable-profiling --enable-library-profiling --ghc-options="-O2 -rtsopts -prof -auto-all -caf-all" vector

but then I get this:

    Loading package primitive-0.6 ... <command line>: can't load .so/.DLL for: libHSprimitive-0.6.dylib (dlopen(libHSprimitive-0.6.dylib, 9): image not found)

This can't work because you need dynamic versions of vector's dependencies for Template Haskell, but you disabled building them with --disable-shared.

Regards,
Reid Barton