Wai 模板函数找不到 Libz.so

Wai template functions cannot find Libz.so

<command line>: can't load .so/.DLL for: libz.so (libz.so: cannot open shared object file: no such file or directory)

这是我在尝试安装某些 WAI 库时遇到的错误:

这似乎与 Template Haskell having problems with dynamic linking 有关。 link 到 zlib 的其他包(或 libz 或 z 或 libz1g 或包管理器选择调用标准压缩库的月份的任何风格)工作正常,只有那些试图 link 在编译时动态添加到它。

我用过nix-env -i zlib && nix-shell -p zlib

我已经在 zlib1gzlib1g-devlib32z1zlib1g:i386、libc6-i386、lib32stdc++6lib32gcc1, lib32ncurses5 (?!) 正如其他 zlib 问题所建议的那样。

whereis libz.so 给出 /usr/lib/x86_64-linux-gnu/libz.a /usr/lib/x86_64-linux-gnu/libz.so 所以我认为该库实际上已安装。

我通过剥离所有 TH 代码获得了 wai-app-static 的精简版本,但我无法在不破坏整个包的情况下从 wai-websockets 中提取它。

有没有人找到安装这些库的方法,最好是使用 Nix,但目前我可以做到。我已经尝试了三天来获得一个有效的构建并且已经浪费了我整个星期的副项目时间而没有编写我自己的一行代码。我会采取任何在这一点上有效的技巧。


有人问使用的命令行。这是由 cabal 生成的:

/home/jfmiller28/.nix-profile/bin/ghc --make -fbuilding-cabal-package -O -static -dynamic-too -dynosuf dyn_o -dynhisuf dyn_hi -outputdir dist/build -odir dist/build -hidir dist/build -stubdir dist/build -i -idist/build -i. -idist/build/autogen -idist/build/global-autogen -Idist/build/autogen -Idist/build/global-autogen -Idist/build -optP-include -optPdist/build/autogen/cabal_macros.h -this-unit-id wai-app-static-3.1.6.2-LkSB3kK5rpLKV2jrN2AtNR -hide-all-packages -Wmissing-home-modules -package-db dist/package.conf.inplace -package-id base-4.10.0.0 -package-id wai-3.2.1.2-i068T7XVUlLxs3fKcREfc -package-id bytestring-0.10.8.2 -package-id http-types-0.12.1-2xWgExX0qOl7yKh7LxUBE2 -package-id transformers-0.5.2.0 -package-id unix-compat-0.5.1-1iiashTJMVo4Z2Bo2H1Lus -package-id directory-1.3.0.2 -package-id containers-0.5.10.2 -package-id time-1.8.0.2 -package-id old-locale-1.0.0.7-7dfSJrRIye3EgzsPnyvNPA -package-id file-embed-0.0.11-8MbWlMh1peh6Y3L9VmTvZW -package-id text-1.2.3.0-1kNDH38DjPO1AsUcP35BNj -package-id cryptonite-0.25-GXzdjgRkEVOKY7fpyz8xaf -package-id memory-0.14.16-5MukHHE9BjI5qglqVrRBGo -package-id http-date-0.0.8-CG5y9eYkeUn6wOfbHom4pU -package-id blaze-html-0.9.1.1-CsJ11WXjlLxBrTMbayeoQA -package-id blaze-markup-0.8.2.1-I4KSuVAN6lL9BOh5kJrkji -package-id mime-types-0.1.0.8-2EwGkNBk8W7Io9sTyOvZ5e -package-id unordered-containers-0.2.9.0-EAgi4LFNl39D8BgT0rhlvy -package-id template-haskell-2.12.0.0 -package-id zlib-0.6.2-KD4SSz9PUL57YfOUBW0y3t -package-id filepath-1.4.1.2 -package-id wai-extra-3.0.24.2-18RlcgWRZiDEaepZgYOTPU -package-id optparse-applicative-0.12.1.0-9EJm9hUjsSHG4weMNInJgv -package-id warp-3.2.23-590EqUmbUTP1AQ3mjwuKbZ -XHaskell98 -XCPP Network.Wai.Application.Static WaiAppStatic.Storage.Filesystem WaiAppStatic.Storage.Embedded WaiAppStatic.Listing WaiAppStatic.Types WaiAppStatic.CmdLine Util WaiAppStatic.Storage.Embedded.Runtime WaiAppStatic.Storage.Embedded.TH -Wall

我感受到你的痛苦。
您可能已经尝试过这些,但这里有一些随机的想法:

  • 确保符号链接 /usr/lib/x86_64-linux-gnu/libz.so 仍然有一个有效的目标。
  • 在命令行中添加“-L /usr/lib/x86_64-linux-gnu”。
  • 尝试在链接器命令行中使用 -rpath (ftp://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html),尽管它可能无济于事。
  • 确保编译器架构确实是 x86_64-linux-gnu (gcc -print-multiarch)。

如果我想到什么,我会回来的。 :-)

如果您可以 post verbatim gcc 命令行,它可能(或可能不会)有所帮助。