在x64 Ubuntu16.04下用configure编译32位静态elinks报错如何解决
问题原因
- 报错本质是部分编译/链接环节没有正确读取到
-m32参数,导致32位架构的目标文件被尝试链接为64位格式 - 找不到
lib.o是因为它是编译过程中生成的临时中间文件,构建失败后会被自动清理,不会持久保存在目录中
解决方案步骤
- 安装必备32位依赖库
先确保系统存在elinks编译需要的32位静态依赖:sudo apt install libc6-dev-i386 lib32ncurses5-dev lib32z1-dev - 彻底清理旧构建缓存
完全删除之前的构建目录,新建干净的独立构建目录避免历史残留干扰:rm -rf ../elinks-build && mkdir ../elinks-build && cd ../elinks-build - 执行修正后的configure命令
去掉无效的LDXXFLAGS参数,新增静态构建专属配置项:
如果配置阶段依然检测架构错误,可以在上述命令中额外添加../elinks-root/configure --build=i686-pc-linux-gnu --host=i386-pc-linux-gnu --enable-static --disable-shared LDFLAGS="-static -m32" CFLAGS="-m32" CXXFLAGS="-m32"CC="gcc -m32" CXX="g++ -m32"强制指定编译器参数 - 编译时额外传递架构参数
避免Makefile子模块未继承全局配置,编译时显式传入参数:make CFLAGS="-m32" CXXFLAGS="-m32" LDFLAGS="-static -m32" -j$(nproc) - 验证生成结果
编译完成后执行以下命令确认产物符合要求:
正常输出会包含file src/elinksELF 32-bit LSB executable, Intel 80386字样,执行ldd src/elinks会提示不是动态可执行文件,符合独立静态二进制的要求。
内容的提问来源于stack exchange,提问作者Ymn1chkA
相关产品推荐
相关产品推荐

