Opened 10 months ago

Closed 8 months ago

#9189 closed bug (fixed)

Linking fails on OSX when -staticlib and -threaded are enabled

Reported by: frode Owned by:
Priority: normal Milestone: 7.10.1
Component: Compiler Version: 7.8.2
Keywords: pthread staticlib threaded Cc:
Operating System: MacOS X Architecture: x86
Type of failure: Compile-time crash Test Case:
Blocked By: Blocking:
Related Tickets: Differential Revisions: Phab:D120

Description

I'm trying to build a library with ffi exported functions to be called from ObjectiveC in an Xcode project on OSX. With just -staticlib it works, but when I add -threaded as well I get a linker error saying that it cannot find pthread. This happens even with a trivial program:

Test.hs:
module Test where
main :: IO ()
main = putStrLn "Hello"
$ ghc Test.hs -staticlib -threaded
[1 of 1] Compiling Test             ( Test.hs, Test.o )
Linking liba.a ...
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lpthread
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lpthread is not an object file (not allowed in a library)

The linker command that fails:

*** Linker:
libtool -static -o liba.a Test.o -L/usr/local/lib/ghc-7.8.2/base-4.7.0.0 -L/usr/local/lib/ghc-7.8.2/integer-gmp-0.5.1.0 -L/usr/local/lib/ghc-7.8.2/ghc-prim-0.3.1.0 -L/usr/local/lib/ghc-7.8.2/rts-1.0 /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_3.o -lHSbase-4.7.0.0 -lHSinteger-gmp-0.5.1.0 -lHSghc-prim-0.3.1.0 -lHSrts_thr -lCffi -lpthread

If I make a script that removes the -lpthread argument, it links ok and the project works with multiple threads calling my ffi-functions simultaneously.

It was suggested by Bob on Haskell Cafe that it should not link against libpthread on OSX since it is included in libSystem (like IOS): https://groups.google.com/d/msg/haskell-cafe/GGEkifs_-uY/uzHeV-Z2E2YJ

https://github.com/ghc/ghc/blob/master/compiler/main/DriverPipeline.hs#L1869-L1873

OSX version 10.9.3
Verbose output:

$ ghc Test.hs -staticlib -threaded -v
Glasgow Haskell Compiler, Version 7.8.2, stage 2 booted by GHC version 7.6.3
Using binary package database: /usr/local/lib/ghc-7.8.2/package.conf.d/package.cache
Using binary package database: /Users/frode/.ghc/x86_64-darwin-7.8.2/package.conf.d/package.cache
hiding package Cabal-1.18.1.3 to avoid conflict with later version Cabal-1.20.0.0
hiding package hoauth2-0.3.6.2 to avoid conflict with later version hoauth2-0.3.7
hiding package hoauth2-0.3.6.1 to avoid conflict with later version hoauth2-0.3.7
wired-in package ghc-prim mapped to ghc-prim-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8
wired-in package integer-gmp mapped to integer-gmp-0.5.1.0-dc47f6b546fc171f67a7f7d311684a99
wired-in package base mapped to base-4.7.0.0-a333addb6892f3cc2e6baa5ec782bd04
wired-in package rts mapped to builtin_rts
wired-in package template-haskell mapped to template-haskell-2.9.0.0-ed6ecfb467e6936688bb20f968f702e1
wired-in package dph-seq not found.
wired-in package dph-par not found.
Hsc static flags:
hiding package Cabal-1.18.1.3 to avoid conflict with later version Cabal-1.20.0.0
hiding package hoauth2-0.3.6.2 to avoid conflict with later version hoauth2-0.3.7
hiding package hoauth2-0.3.6.1 to avoid conflict with later version hoauth2-0.3.7
wired-in package ghc-prim mapped to ghc-prim-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8
wired-in package integer-gmp mapped to integer-gmp-0.5.1.0-dc47f6b546fc171f67a7f7d311684a99
wired-in package base mapped to base-4.7.0.0-a333addb6892f3cc2e6baa5ec782bd04
wired-in package rts mapped to builtin_rts
wired-in package template-haskell mapped to template-haskell-2.9.0.0-ed6ecfb467e6936688bb20f968f702e1
wired-in package dph-seq not found.
wired-in package dph-par not found.
*** Chasing dependencies:
Chasing modules from: *Test.hs
Stable obj: [Test]
Stable BCO: []
Ready for upsweep
  [NONREC
      ModSummary {
         ms_hs_date = 2014-06-10 10:02:41 UTC
         ms_mod = main:Test,
         ms_textual_imps = [import (implicit) Prelude]
         ms_srcimps = []
      }]
*** Deleting temp files:
Deleting:
compile: input file Test.hs
Created temporary directory: /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0
*** Checking old interface for main:Test:
[1 of 1] Skipping  Test             ( Test.hs, Test.o )
Upsweep completely successful.
*** Deleting temp files:
Deleting: /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_1.s
Warning: deleting non-existent /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_1.s
link: linkables are ...
LinkableM (2014-06-10 10:02:55 UTC) main:Test
   [DotO Test.o]
Linking liba.a ...
*** C Compiler:
/usr/bin/gcc -m64 -fno-stack-protector -DTABLES_NEXT_TO_CODE -c /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_2.c -o /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_3.o -I/usr/local/lib/ghc-7.8.2/include
*** Linker:
libtool -static -o liba.a Test.o -L/usr/local/lib/ghc-7.8.2/base-4.7.0.0 -L/usr/local/lib/ghc-7.8.2/integer-gmp-0.5.1.0 -L/usr/local/lib/ghc-7.8.2/ghc-prim-0.3.1.0 -L/usr/local/lib/ghc-7.8.2/rts-1.0 /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_3.o -lHSbase-4.7.0.0 -lHSinteger-gmp-0.5.1.0 -lHSghc-prim-0.3.1.0 -lHSrts_thr -lCffi -lpthread
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lpthread
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lpthread is not an object file (not allowed in a library)
*** Deleting temp files:
Deleting: /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_3.o /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0/ghc26454_2.c
*** Deleting temp dirs:
Deleting: /var/folders/jc/3pqglx_x3z9dk3gnxgh56tv80000gp/T/ghc26454_0

Change History (5)

comment:2 Changed 9 months ago by etrepum

  • Status changed from new to patch

comment:3 Changed 9 months ago by thoughtpolice

  • Differential Revisions set to Phab:D120

comment:4 Changed 8 months ago by Austin Seipp <austin@…>

In 8d90ffae3a3c0d7c9ac8800ae91887aeaa9917d3/ghc:

fix darwin threaded static linking by removing -lpthread option #9189

Summary: Signed-off-by: Bob Ippolito <[email protected]>

Test Plan: See repro instructions in trac #9189

Reviewers: austin

Reviewed By: austin

Subscribers: phaskell, simonmar, relrod, ezyang, carter

Differential Revision: https://phabricator.haskell.org/D120

GHC Trac Issues: #9189

comment:5 Changed 8 months ago by thoughtpolice

  • Milestone set to 7.10.1
  • Resolution set to fixed
  • Status changed from patch to closed

Merged, thanks.

Note: See TracTickets for help on using tickets.