【问题标题】:Acces foreign library from cabal2nix in andother derivation在另一个派生中从 cabal2nix 访问外国图书馆
【发布时间】:2021-01-14 20:06:49
【问题描述】:

我正在使用 nix 和 cabal2nix 构建 Haskell 外国图书馆。构建后./result/目录包含libroman.so/lib/ghc-8.8.4/子目录下。

当尝试在另一个派生中使用它时(在我的例子中是 qt ),链接器看不到它。

Haskell nix:

let
  pkgs = import <nixpkgs> {};
in

pkgs.haskellPackages.callCabal2nix "roman" ./. {}

Qt 尼克斯:

let
  pkgs = import <nixpkgs> {};
  romanEngine = import ../engine/default.nix;
in

pkgs.qt5.mkDerivation {
  name = "roman-gui";
  src = ./.;

  nativeBuildInputs = [
    pkgs.qt5.qmake
  ];

  buildInputs = [
    pkgs.qt5.qtbase
    romanEngine
  ];
}

链接器错误:

/nix/store/b10shv9yqbgps47y0n8x7l7bq8fmp1i6-binutils-2.31.1/bin/ld: cannot find -lroman

如何正确链接到我已构建的外部库?

【问题讨论】:

    标签: haskell ffi nix


    【解决方案1】:

    这是未经测试的,但可能会导致解决方案。

    stdenv 将配置链接器以查看&lt;storepath&gt;/lib。也许您可以将您的库符号链接到那里?

    let
      pkgs = import <nixpkgs> {};
      inherit (pkgs.haskell.lib) overrideCabal;
      generatedPkg = pkgs.haskellPackages.callCabal2nix "roman" ./. {};
    in
    
    overrideCabal generatedPkg (
      drv: {
        postInstall = (drv.postInstall or "") + ''
          ln -s $out/lib/ghc-*/* $out/lib
          # or something similar to make the libs available where the linker
          # expects them
        '';
      }
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-04
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多