64位linux 编译c程序链接到i386-linux-gnu-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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:30:48 2013 0
1 条回答
写回答
取消 提交回答
  • a123456678

    这个问题涉及到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:34
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
Decian GNU/Linux安全合规之路
立即下载
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载
冬季实战营第二期:Linux操作系统实战入门
立即下载