爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9782|回复: 10

linux下程序编译的问题和方法

[复制链接]

新浪微博达人勋

发表于 2011-12-9 09:14:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
首先声明,这段是从网上摘抄的,非本人所写,觉得虽然简单,但基础很重要,防止自己的信息丢失,放上来安全点,和大家分享分享,呵呵


    在不同平台、不同环境下,编译可能会出现各种各样的状况,看似复杂,其实万变不离其宗,只要了解大概的编译机制,一般来说都可以自己解决。

一、编译器:
编译一个程序之前首先先读一读Readme、Install或者手册上关于安装的部分,确定自己机器上的编译器是否能够用于该程序的编译。
一般c语言gcc、g++编译器即可胜任,有特殊优化需要的会使用icc。
fortran语言有的程序要求使用ifort。
常见错误:
编译命令没有出现在$PATH变量中,这是安装问题,一般用rpm包或者从源安装不会有问题,intel的编译器需要把bin中的配置变量的脚本在profile中自动执行。libstdc++库的问题,有些软件使用的是5,而不是现在的6,这时需要安装compat-libstdc++-296和compat-libstdc++-33两个包。
有时需要用mpicc或mpicxx或mpif77之类的来编译,实际上它们也是调用现有的编译命令,只不过加上了自己的一些头文件和库。
改变编译器的使用一般通过改变环境变量来完成,不同的mpi实现有所不同,可以google一下。

二、编译:
编译是把程序源文件编译成目标文件,也就是把c、cpp、f等文件编译成o文件。
这一步对应的个关键环境变量是:CC(c的编译命令),FC(f的编译命令),CCFLAGS(c的编译参数),FCFLAGS(f的编译参数等)
这一步只要求程序中的每个
函数有明确声明就可以通过,不知道什么是声明反正就理解为头文件需要能够被找到即可。
常见错误:
找不到头文件,这时需要自己确定头文件位置,把 -I[头文件路径] 参数加到对应的CCFLAGS或FCFLAGS中,编译器就知道去哪里找了。

三、链接:
把o文件和lib文件件组织成可执行文件。这也是错误最多的一个地方。
关键环境变量: LINK(其实就是前面的编译器), LDFLAGS(链接参数)
关键参数:

-L[库路径] 告诉链接器(LINK)去哪里找库文件
-l[库名] 告诉链接器需要链接哪些库, 命名方式是这样的: libxxx.a <--> -lxxx 如: libm.a <--> -lm , libmpi.a <--> -lmpi
常见错误:

can not find libxxx,找到需要链接的库的a文件,把路径通过-L告诉链接器
unresolved xxxx 这个最常见
一般google一下缺失的函数,就能知道是什么库,有就用-L和-l加入,没有就想办法装
如果不能确定是一堆库文件里的哪个,有个笨方法:
nm xxx.a 可以看到这个库中所有的函数名,结合 grep命令,找到像要的函数在哪个a中,用-l加上
总之多看看变译时候的抱错信息,无非就那几种,总能找到解决的办法。
编译的套路:
有的小点的程序已经写好了Makefile文件,我们要做的就是根据自己的系统把正确的路径和库加到上面介绍的几个变量里,然后make
大部分程序需要./configure,先-help看看有什么需要注意的参数。

如果抱错,无非是某某库找不到,参考前面的参数:./configure CC=xx CCFLAGS="-Ixxx xxx xxx"
必要的库和程序先装上,环境变量设好,通过之后得到Makefile文件,直接make即可。


还可能遇到其它编译的套路,需要仔细看安装文档,但基本原理都是一样的.



评分

参与人数 2金钱 +20 贡献 +3 体力 +20 收起 理由
mofangbao + 10 + 3 昨天忘给了。。。
artmunich + 10 + 20 ~分享好东西岂能不给分

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-12-9 09:45:30 | 显示全部楼层
谢谢啦,楼主rp不错呀
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-9 10:14:33 | 显示全部楼层
热心的网友,总是有回报的,感谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-9 11:27:53 | 显示全部楼层
lz好样的,这些东西其实真的很重要,给分!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-9 15:45:42 | 显示全部楼层
这个文档推出的正是时候,告诉这里的库路径的语法、加载的库文件的语法,以及如何寻找库文件的函数。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-9 15:48:11 | 显示全部楼层
个人认为,文档在写法上越有直线逻辑越好,这样很多问题就非常容易理解,不怕啰嗦,就怕遗漏重要信息
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-10 08:56:04 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-22 10:47:50 | 显示全部楼层
这个太给力啦,刚好在最近在弄着转模型。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-14 14:40:42 | 显示全部楼层
嗯,这个对初学者来说很不错!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-16 22:03:15 | 显示全部楼层
不错,好东西,感谢!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表