When I run
stack --resolver=lts-7.14 install zlib
I'm getting message saying that package should be recompiled with -fPIC
flag:
Configuring zlib-0.6.1.2...
Building zlib-0.6.1.2...
Preprocessing library zlib-0.6.1.2...
/usr/bin/ld: .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.0.0/build/Codec/Compression/Zlib/Stream_hsc_make.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
How to tell stack to recompile zlib
with -fPIC
flag?
I added ghc-options to yaml file:
ghc-options:
zlib: -fPIC
apply-ghc-options: locals
rebuild-ghc-options: true
Also, I added -fPIC
flag to ghc-options in cabal file.
But still, I'm getting the same output:
-- While building package zlib-0.6.1.2 using:
/home/vladimir/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.0.0_ghc-8.0.1 --builddir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.0.0 build --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
Logs have been written to: /home/vladimir/Desktop/ffmpeg-light/.stack-work/logs/zlib-0.6.1.2.log
Where ghc-options are -ddump-hi
and -ddump-to-file
and no -fPIC
. Did I miss something?
GCC, stack and OS versions:
GCC: gcc (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005
Stack: Version 1.3.0, Git revision 99b910d3c8e183aa376cb1e6f0341d86aed6d00e (4372 commits) x86_64 hpack-0.15.0
OS: Ubuntu 16.10
Looks like it is bug.
I found a hack:
I replaced
("C compiler flags", "-fno-PIE -fno-stack-protector")
by
("C compiler flags", "-fPIC -fno-stack-protector")
in file
/home/you/.stack/programs/x86_64-linux/ghc-8.0.1/lib/ghc-8.0.1/settings
Now it compiles and works. I tested it on my project.
The issue is in how Cabal invokes hsc2hs. You need commit https://github.com/haskell/cabal/commit/c993a0c6660aa10d8c79ed0cc4961c59acfc91c8 which is present as of Cabal 1.24.1.0.