5

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

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

  • wai-app-static-3.1.6.2
  • wai-websockets-3.0.1.2

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

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

我已经按照其他 zlib 问题的建议完成apt-get installzlib1g, zlib1g-dev, lib32z1, zlib1g:i386, libc6-i386, lib32stdc++6, lib32gcc1, (?!) 。lib32ncurses5

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
4

1 回答 1

1

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

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

如果我再想一想,我会回来的。:-)

如果您可以逐字发布 gcc 命令行,它可能(或可能不会)有帮助。

于 2018-09-05T01:31:26.750 回答