【发布时间】:2019-04-18 08:24:36
【问题描述】:
我正在本地机器上使用常规的cabal build 构建,并且二进制文件工作正常。但是当我将二进制文件复制到另一台服务器进行测试时(据我所知,相同的架构:x86_64 和相同的 glic 等等)我在尝试运行它时收到了非法指令。
我应该将一些标志传递给 cabal 以使其编译更通用的二进制文件吗?
谢谢
【问题讨论】:
-
能否提供完整的错误日志?
-
非法指令是完整的错误日志,不是编译时错误
-
看起来编译器使用了一些 CPU 指令,这些指令在您的第一台机器上可用,但在另一台机器上不可用。如果这些是 linux,您可以比较
cat /proc/cpuinfo并观察一些标志是不同的,指向一些缺失的指令。还可以尝试file yourExecutable以确认它确实是ELF 64-bit LSB executable, x86-64。但是,我不知道如何创建更通用的二进制文件。也许你需要一些 llvm 标志(如果 ghc 正在通过 llvm)。 -
是的,我本地的 cpu 比服务器的要新得多。我确实检查了二进制文件是一个常规的 64 位可执行文件,它是,我只是不知道如何告诉 cabal build 基本上使用 -march=generic -mtune=generic,就像我在 C 中所做的那样
-
您需要为目标环境构建 GHC 编译器和库。如果您搜索“交叉编译 Haskell”,就会有大量信息。
标签: haskell