开发者社区> 问答> 正文

64位linux 编译c程序链接到i386-linux-gnu

在自己的64位的linux上写的C程序,编译运行都很正常,生成的.d文件里面链接的库也是链接到x86_64-linux-gnu下的。程序拷贝到64位服务器上去运行也没有问题,但是如果重新make的话就会出错,.d文件里面链接的库都是链接到 i386-linux-gnu 下的,然后提示找不到这些头文件。已经检查了服务器上 make gcc g++ 的版本号,都是和自己笔记本上一致的

展开
收起
a123456678 2016-06-27 14:32:29 3542 0
1 条回答
写回答
取消 提交回答
  • 这个问题涉及到32位,64位机器以及GCC在这两种平台上的具体用法

    如果你的机器是Intel CPU,安装的是Linux 64位系统,自然编译时链接库也会自动选择64位库,这个信息可以从你输入命令gcc -v, 从Target: x86_64-xxxxxxx和Configured With:.......等信息可以确认。(光是看版本号是不行的)

    程序在你的笔记本上编译和运行正常, 你把程序copy到服务器上运行也正常,说明该程序所依赖的64位库文件在服务器上也能找到(通常在/lib64/....)

    但是如果在服务器上进行编译,就会出错,显示错误是头文件找不到, 库文件链接错误(去找32位库),这说明可能服务器上的gcc默认配置可能不合适,它会自己默认去链接32位库,请检查你服务器上的gcc -v。

    相要修改这个问题,你可以选择补全32位环境,包括对应库文件, 然后在服务器上以32位环境运行; 或者是在服务器上gcc加入选项-m64。

    2019-07-17 19:47:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 技术揭秘 立即下载
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载