原因太多了。但由内到外来说,大致有四类原因:
情况一:操作系统的区别。同样的c代码编译出的可执行程序,是不能跨操作系统的。比如:Windows、Linux、mxos,可执行程序的格式都不同,互不兼容。在哪个上面编译的,就只能在那个上面运行。(注:有的编译器支持交叉编译,可以编译出在不同平台上运行的版本。)
情况二:64位和32位的区别。同样的操作系统,64位OS上编译出的程序,放到32位上是运行不了的。反之亦然。
情况三:缺少动态库。C程序里会调用大量的库函数,这些库函数的本体大多封装在动态链接库里(有的动态库是操作系统提供的,有的是第三方软件提供的)。如果目标系统上,缺少相应的动态库,程序是无法运行的。
情况四:环境不一致。程序运行都有其以来的环境,比如:环境变量、注册表、配置文件、资源文件、第三方系统接口等,如果这些环境不具备或配置不正确,也会影响程序的正常运行。