【发布时间】:2012-07-19 18:51:14
【问题描述】:
我想在一个 Linux 机器上编译一个 Haskell 程序,然后在另一个 Linux 机器上运行它。但是,这似乎根本不起作用。我收到有关缺少库的错误。
大概当我安装 GHC 时,包管理器也会安装它需要的所有库和东西。 [我有些恼火地注意到,至少有一个打包系统无法安装 GCC,而 GHC 显然无法在没有...的情况下运行...] 但是,当然,目标系统没有安装这些依赖项。因此,如果我将编译后的二进制文件复制到目标系统,它就无法运行。
有没有办法解决这个问题?我习惯于使用 Windows,如果您在其中编译某些东西,它只会在所有 Windows 系统上工作。 (至少,直到你真正尝试使用非标准工具,如数据库访问或其他东西......)像这样的一些神秘的胡言乱语。
只是为了让事情变得有趣:我只有对目标机器的 FTP 访问权限,而不是 shell 访问权限。我什至不完全确定它运行的是什么操作系统。所以我可以随心所欲地更改我的 build 机器,但除了将文件复制到它之外,我无法对 target 机器做任何事情。
【问题讨论】:
-
我会开始但在 google 上查找该错误以及手头的 linux 发行版的名称,可能是其他人使用存储库包时遇到的错误
-
我不得不笑“如果你编译一些东西,它只适用于所有 Windows 系统。”。你听说过“DLL 地狱”这个词吗?该术语并非来自 Linux。 ;-)
-
@DanielWagner 你意识到“DLL 地狱”在大约 10 年前就不再是一个问题了,对吧?
-
@MathematicalOrchid,DLL 地狱仍然存在。如果程序 A 需要“mylib.dll v3.0”,然后程序 B 需要“mylib.dll v4.0”,程序 A 将停止工作,因为它不支持新覆盖的 DLL。 Windows 有两种解决方案:创建名称略有不同的库的多个副本,并使可执行文件链接到特定版本(因此在我的计算机上通过“d3dx9_43.dll”创建“d3dx9_1.dll”),或创建“虚拟”系统覆盖”在 system32 上,以便程序获取它自己安装的 DLL。这两种解决方案都会导致巨大的内存浪费和磁盘开销。