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