我正在我的本地机器上使用常规cabal build
构建,二进制工作正常。但是,当我将二进制文件复制到另一台服务器进行测试时(相同的架构:x86_64和相同的glic等等,就像我所知道的那样)当我尝试运行它时,我得到非法指令。
是否有一些标志我应该传递给cabal以使其编译更通用的二进制文件?
谢谢
与GCC不同,GHC编译器只有少数选项来调整指令集,默认情况下它们都是关闭的。完整清单是:
-msse -msse2 -msse3 -msse4 -msse4.2 -mbmi -mbmi2 -mavx -mavx2
-mavx512cd -mavx512er -mavx512f -mavx512pf
但没有相应的-mno-sse
或类似的选项可以关闭它们,因为就像我说的那样,它们默认是关闭的。 (嗯,实际上,在x86_64架构上,-msse
和-msse2
标志在技术上被强制打开,无法禁用。)
所以,问题可能是其他问题,很可能是一个不兼容或损坏的库。在gdb
下运行以获得回溯并查看是否可以发现可疑库或其他明显原因可能会有所帮助。