【问题标题】:Haskell cabal include static libraryHaskell cabal 包含静态库
【发布时间】:2016-03-16 15:38:37
【问题描述】:

我有一个非常简单的问题。

我正在尝试将存档库(称为 mylib.a)与大型 C 项目(使用 GHC 的 MinGW 副本编译)一起使用。

从我拥有的顶层:

./project.cabal
./src/...haskell..code...
./cbits/interface.c (simplifies access to `lib.a`)
./include/mylib.h
./lib/mylib.a      <<<<<<<<<<<<<<< not sure where to put this or how to reference it

project.cabal 两者兼有

c-sources:           cbits/interface.c
include-dirs:        include

extra-lib-dirs 似乎想要一个绝对路径(目录)。

如何解决这个问题?

【问题讨论】:

  • 在预编译代码中的链接并不是 cabal 的理想用例。你可以这样做,例如 intel-aes 包有几个平台的预编译代码分发为 extra-source-files 然后链接那些使用来自 build-type: Custom 和自定义 Setup.hs 的阴谋钩子。
  • 你能试试extra-libraries: mylib吗?您需要将正确的路径添加到extra-{lib/incude}-dirs,如果您需要自定义链接器选项(例如),您可以使用ghc-options: -optl &lt;linker option&gt;。除非您使用 makefile 来构建(或其他一些非阴谋集团构建工具),否则您可能无需编写 Custom 构建脚本就可以逃脱。
  • 是的,我最初尝试过这个。它产生通常的* Missing C library: mylib(在configure 步骤期间)

标签: haskell cabal ffi


【解决方案1】:

答案来自这里https://github.com/haskell/cabal/issues/4677

我想你的存档名称是 libmylib.a,然后将它添加到你的 cabal 文件中

ghc-Options: -pgml gcc "-optl-Wl,--allow-multiple-definition" "-optl-Wl,--whole-archive" "-optl-Wl,-Bstatic" "-optl-Wl,-lmylib" "-optl-Wl,-Bdynamic" "-optl-Wl,--no-whole-archive"

您可能还需要指定 gcc 选项 -L 以指定存档路径

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多