原因太多了。但由內到外來說,大致有四類原因:
情況一:操作系統的區別。同樣的c代碼編譯出的可執行程序,是不能跨操作系統的。比如:Windows、Linux、mxos,可執行程序的格式都不同,互不兼容。在哪個上面編譯的,就只能在那個上面運行。(注:有的編譯器支持交叉編譯,可以編譯出在不同平臺上運行的版本。)
情況二:64位和32位的區別。同樣的操作系統,64位OS上編譯出的程序,放到32位上是運行不了的。反之亦然。
情況三:缺少動態庫。C程序里會調用大量的庫函數,這些庫函數的本體大多封裝在動態鏈接庫里(有的動態庫是操作系統提供的,有的是第三方軟件提供的)。如果目標系統上,缺少相應的動態庫,程序是無法運行的。
情況四:環境不一致。程序運行都有其以來的環境,比如:環境變量、注冊表、配置文件、資源文件、第三方系統接口等,如果這些環境不具備或配置不正確,也會影響程序的正常運行。