Build 静态链接到本地“.a”文件

Build 静态链接到本地“.a”文件,build,linker,ghc,cabal,haskell-stack,Build,Linker,Ghc,Cabal,Haskell Stack,我想创建一个静态链接到本地.a文件的库 为了使它更具体,这里有一个HPack包.yaml,它创建了一个二进制phase2,静态链接到cobj/libImpl.a: name: clashilator-model-phase2 version: 0 category: acme dependencies: - base executables: phase2: main: phase2.hs source-dirs: src include-di

我想创建一个静态链接到本地
.a
文件的库

为了使它更具体,这里有一个HPack
包.yaml
,它创建了一个二进制
phase2
,静态链接到
cobj/libImpl.a

name: clashilator-model-phase2
version: 0
category: acme

dependencies:
  - base

executables:
  phase2:
    main: phase2.hs        
    source-dirs: src
    include-dirs: csrc
    build-tools: hsc2hs

    extra-libraries: stdc++ 
    extra-lib-dirs: cobj
    ghc-options:
      -O3 -fPIC -pgml g++
      -optl-Wl,--allow-multiple-definition
      -optl-Wl,--whole-archive -optl-Wl,-Bstatic
      -optl-Wl,-L./cobj -optl-Wl,-lImpl
      -optl-Wl,-Bdynamic -optl-Wl,--no-whole-archive
现在,如果我尝试对一个库做同样的事情,有两件事会出错:

name: clashilator-model-phase2
version: 0
category: acme

dependencies:
  - base

library:
  source-dirs: src
  include-dirs: csrc
  build-tools: hsc2hs

  exposed-modules:
    - Interface

  extra-libraries: stdc++
  extra-lib-dirs: cobj
  ghc-options:
    -O3 -fPIC -pgml g++
    -optl-Wl,--allow-multiple-definition
    -optl-Wl,--whole-archive -optl-Wl,-Bstatic
    -optl-Wl,-L./cobj -optl-Wl,-lImpl
    -optl-Wl,-Bdynamic -optl-Wl,--no-whole-archive
  • extra lib dirs
    旗帜吓坏了阴谋集团:
  • clashilator-model-phase2-0
    library dirs
    cobj
    是使 没有意义(因为它没有任何相对的东西)。您可以创建路径 使用$
    {pkgroot}
    相对于包数据库本身。(使用
    --强制执行
    
    覆盖)

    通过编写自定义的
    Setup.hs

  • 如果我遵循上面的答案,或者删除
    extra lib dirs
    标志,构建似乎成功了,但遗憾的是,生成的
    。一个
    文件没有链接到
    libImpl.a
  • 因此,尝试在可执行文件中使用来自另一个Cabal/Stack项目的结果库在链接时失败

    $ nm .stack-work/dist/x86_64-linux/Cabal-3.0.1.0/build/libHSclashilator-model-phase2-0-Da0NUHx0OMlCviQdOLebNo.a |grep bar
                     U bar