在自己的64位的linux上写的C程序,编译运行都很正常,生成的.d文件里面链接的库也是链接到x86_64-linux-gnu下的。程序拷贝到64位服务器上去运行也没有问题,但是如果重新make的话就会出错,.d文件里面链接的库都是链接到 i386-linux-gnu 下的,然后提示找不到这些头文件。已经检查了服务器上 make gcc g++ 的版本号,都是和自己笔记本上一致的。
这个问题涉及到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。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。