我正在尝试在xeon phi协处理器上执行一个二进制文件,然后它回来了" bash:无法执行二进制文件"。所以我试图找到如何查看错误日志或让它显示当我告诉它执行时发生的事情导致它无法正常工作。我已经尝试了bash --verbose
,但它没有显示任何其他信息。有什么想法吗?
答案 0 :(得分:2)
您没有指定编译可执行文件的位置以及尝试执行的位置。 要在主机系统上编译要直接在协处理器上执行的程序,您必须:
如果要直接在协处理器上编译,可以使用MPSS用户指南中的说明安装其他rpm文件,从协方处理器(在mpss- / k1om中找到)中提供的其他rpm文件中安装必要的文件。 要在协处理器上运行程序,如果已在主机上编译它,则必须:
如果您正在使用卸载模型编写程序(部分工作是使用主机完成的,那么部分工作将传递给协处理器),您可以使用英特尔编译器在主机上编译而无需特殊选项。 但请注意,无论使用何种方法,与协处理器的可执行文件一起使用的任何库都需要为协处理器构建。存在默认库但您添加的任何库,除了为主机系统制作的任何版本之外,还需要为协处理器构建版本。 我强烈推荐您在https://software.intel.com/en-us/articles/programming-and-compiling-for-intel-many-integrated-core-architecture下找到的文章。这些文章是由开发和/或支持协处理器的各种编程工具的人编写的,应该回答大部分问题。
答案 1 :(得分:1)
更新:下面的内容未回答OP的问题 - 这是一个可能的解释cannot execute binary file
错误,但错误消息以bash:
为前缀的事实表明二进制文件正在调用(通过bash),但是与执行平台不兼容(为不同的架构编译) - 正如@Barmar已经在评论中说明的那样。
因此,虽然下面包含一些(希望仍然有些有用)的一般信息,但它并没有解决OP的问题。
cannot execute binary file
的一个可能原因是错误地传递二进制(可执行文件) - 而不是shell脚本(包含shell代码的 text 文件) - 作为操作数(文件名参数)以bash 。
以下说明了问题:
bash printf # fails with '/usr/bin/printf: /usr/bin/printf: cannot execute binary file'
注意错误传递的二进制文件路径如何将错误消息加前两次;如果第一个前缀改为bash:
,则原因很可能不是调用错误的问题,而是尝试调用不兼容的二进制文件(编译)对于不同的架构)。
如果您希望bash调用二进制文件,则必须使用-c
选项来传递它,这允许您指定整个命令行;即二进制加参数; e.g:
bash -c '/usr/bin/printf "%s\n" "hello"' # -> 'hello'
如果您传递仅仅二进制文件名 而不是完整路径 - 例如-c 'program ...'
- 则该名称中的二进制文件必须存在于其中一个目录列在bash看到的$PATH
变量中,否则您将收到command not found
错误。
相反,如果二进制文件位于当前目录中,则必须在文件名前添加./
,以便bash找到它;例如-c './program ...'