如何判断可执行文件是否已针对本机进行编译?

| 我有一些我可以编译并运行的c代码,可以在许多不同的unix计算机(各种linux和mac,有时是其他)上访问的目录中,并且不同的OS \显然需要不同的可执行文件。 我有一个简单的shell脚本,它会调用相应的可执行文件ѭ0,并在必要时首先对其进行编译。这非常简单(尽管需要使用ѭ1才能可靠地定义
$OSTYPE
$MACHTYPE
),并且几乎可以正常工作。 但是,事实证明,甚至
$OSTYPE
$MACHTYPE
还是不够的:例如,在OSX 10.5上进行编译会生成可执行文件
prog.darwin.i386
,当在OS​​X 10.4上调用该可执行文件时,它会立即崩溃。 是的,每次我要运行该程序时都重新编译是解决此问题的一种方法,但似乎过分了。我知道每台机器上都有一个“ 7”目录是一种标准解决方案,但是非root用户可能在其主目录(这是所有机器通用)之外没有太多写访问权限。 所以我的问题是,有没有更好的方法?编译器(通常是gcc)显然知道它要针对哪种系统进行编译-是否有一种很好的可移植方法来找出我的脚本正在运行的“某种系统”,因此它可以调用正确的可执行文件,而不是行为不确定的人之一?     
已邀请:
您可以使用
gcc -v
来确定已安装/可运行的gcc认为托管编译的目标是什么(类似于bash中的
$(gcc -v 2>&1 | grep Target: | sed \'s/.*: *//\')
) 编辑 如果您确实希望在没有任何特别安装的情况下执行此操作,则可以从gcc(位于任何gcc源软件包的顶级目录中)提取
config.guess
脚本并运行该脚本。不幸的是,这不适用于所有系统,并且可能与gcc软件包在某些发行版中使用的系统不完全匹配,但这是用于配置gcc以进行构建的脚本,除非您明确覆盖它。     
尝试在shell提示下使用
file
命令     
下载一些用C编写的开源程序包,然后看一下./configure文件,它基本上是一个大型shell脚本,通常通过编译和运行简短的C程序来从许多来源收集信息。这将告诉您所有您需要了解的内容。 由于您正在使用最新的Mac OS X,因此请确保选择一个当前正在维护并支持OS X版本的软件包。     

要回复问题请先登录注册