Debian 8.0 Jessie下Gitian构建Windows QT exe时.o文件不被ld识别
作为刚接触跨平台构建的新手,遇到这个问题其实挺常见的,我给你拆解几个最可能的原因,全是大白话:
架构不匹配:你是在Linux上构建Windows程序,用的是交叉编译工具链。如果你的
.o文件是用Linux本地GCC编译出来的(对应x86_64-linux-gnu架构),但链接时用的是Windows的交叉链接器(比如x86_64-w64-mingw32-ld),这俩根本不是一个体系的,链接器自然认不出这些.o文件。就像你给只会说中文的人塞英文说明书,他肯定看不懂。编译工具链版本/类型不一致:就算都是交叉编译工具链,要是编译
.o文件用的是一套工具,链接时换了另一套(比如用了不同版本的MinGW,或者混用了Clang和GCC的工具),也可能导致链接器读不懂目标文件。打个比方,你用Word写的文档,用WPS旧版本打开可能会乱码,就是这个道理。目标文件损坏:构建过程中如果中断过(比如网络断了、磁盘空间不够),生成的
.o文件可能不完整或者损坏。这种情况下链接器打开文件发现内容不对,自然会报错。就像你下载的安装包损坏了,双击根本装不了。错误的文件路径或命名:有时候脚本里可能写错了
.o文件的路径,或者文件名打错了,链接器找不到正确的文件,也会提示“无法识别”。这就像你找东西找错了抽屉,打开发现不是你要的,就会懵。
针对你的Gitian构建场景,最大概率是交叉编译工具链的架构不匹配——Gitian应该是用指定的MinGW工具链来编译Windows程序的,要是你的项目代码里有部分编译步骤用了本地Linux的编译器,就会生成不符合要求的.o文件。
内容的提问来源于stack exchange,提问作者student101

