Web Analytics

为buildc添加setup脚本

buildc在发布0.1.0版时并没有做好安装脚本,当时的建议是直接下载0.1.0的源码包或svn export/checkout源码包,并手工将buildc目录位置加入到用户的PATH环境变量中。近期buildc计划正式投入到项目中使用,为了方便大家安装以及以后的统一升级维护,我花了些时间给buildc加上了setup脚本。 Python有标准的程序分发方案,不过我对这些了解不多。buildc本身很简单,我觉得没有必要把安装做得很复杂,所以就自己动手编写了一个setup.py,不到100行,用于安装buildc。 Python的标准安装脚本也叫setup.py,我这里也借鉴了这个名字。有了setup.py,buildc的安装就简单多了: * 下载buildc Release包(当前最新是buildc-0.1.1) * 解压发布包,在发布包路径下,执行setup.py install [–prefix=YOUR_INSTALL_PATH] ...

February 7, 2012 · 3 min · Tony Bai

也谈C应用安装包制作与部署

虽然部门一直在做C应用,但这么多年来,在C应用的安装包制作以及部署方面做得还是很初级,可以说还没有达到规范的程度。各个产品线的C应用安装包种类多样,水平参差不齐:有些产品的源码包即是安装包,把源码包拿到生产环境下编译后使用;有的项目则将编译好的目标文件(.o)以及第三方库放在安装包中,在生产环境下重新链接生成可执行文件;有的组则稍微专业一些,安装包中放的是编译好的可执行文件,但在目标主机上安装和执行时也都遇到了一些问题,诸如运行环境中的第三方库版本号与程序所依赖的不一致等。 去年年底,我就将"C应用安装包制作和部署"的改进作为今年的一个工作重点。这两天我粗略地考量了一下这方面的内容,这里也简单地谈谈。 ...

February 1, 2012 · 4 min · Tony Bai

也谈C语言应用构建

构建是软件开发过程中最常见的活动之一,也是很容易被忽视的环节。规范以及高效的构建对软件开发过程而言是大有裨益的。C语言并非一门年轻的语言,其历史已甚为悠久了(相对于还年轻的IT领域^_^)。从C语言诞生以来,市面上存在的C语言应用何止千千万万。这些C应用的源码组织形式种类万千,从最简单的单个源文件,到复杂的诸如Apache httpd server这样庞大的Project。不过无论这些C应用的源码组织形态如何,构建都是这些应用开发过程中必不可少的一步。 ...

January 17, 2012 · 8 min · Tony Bai

C语言项目构建管理辅助工具 – buildc

这几年我一直从事C语言项目的开发。这些项目的规模都不算小,少则十几万代码,多则几十万行代码,至少也都算得上是中型项目吧。项目构建工具使用的是传统的Make工具,构建脚本都是自行编写的,构建时直接在顶层目录下敲入make即可。 这种传统的构建方式其实是很耗时费力的。比如执行make之前你需要根据项目代码的实际路径重新设定一些环境变量或修改Makefile中的某些标识路径的变量;你还要将项目依赖的各种内部公共库、第三方开源库悉数找到,并安装在指定目录下,修改Makefile中这些第三方库的路径配置。只有做完这些后,你才能顺利地执行Make。以后每当你更换一个环境,你就要将上面的步骤重复执行一遍。有的项目第三方依赖较多,要完整地搭建一个项目构建环境所耗费的时间也是很惊人的,特别是对一些不熟悉项目构建的新人更是如此。另外随着产品被要求具备在多个平台上运行的能力,你的构建脚本还要支持在多个平台上的构建,你要为项目所依赖的第三方库准备多个平台的版本;当某个依赖库版本进行了升级,你还要手工在多个环境下进行更新。 ...

December 8, 2011 · 10 min · Tony Bai

共享库中的符号链接

清晨,部门新来的一位小兄弟打来求助电话,说是系统启动的时候出现类似:“ld.so.1: testmain: 致命的: 重定位错误: 文件./libtestshared.so: 符号static_add: 参照的符号没有找到"的错误。这个系统是05年开发的一个复用度很高的自研产品,后续项目只需在其基础上做少量二次开发工作即可满足新功能的要求。为了做到一定的通用性,我们使用了类似插件的框架,这样系统在启动的时候会根据配置加载一些’共享库’(.so文件),而这个小同事反映的问题就出在这。 ...

February 3, 2008 · 6 min · Tony Bai

也谈’SIGBUS和SIGSEGV’

SIGBUS和SIGSEGV也许是我们在平时遇到的次数最多的两个内存错误信号。内存问题一直是最令我们头疼的事情,弄清楚两个信号的发生缘由对我们很好的理解程序的运行是大有裨益的。 我们来看两段程序: //testsigsegv.c int main() { char *pc = (char*)0×00001111; *pc = 17; } ...

December 19, 2007 · 3 min · Tony Bai

一个很有意思的Bug

这个Bug源于昨天凌晨的一次版本升级失败。睡了一大觉后,下午回到公司,重现了这个问题并找到了原因,发现这的确是一个’很有意思的Bug’。 ...

December 18, 2007 · 3 min · Tony Bai

'符号连接'那些事儿

我们在编译自己开发的程序或者一些开源软件的时候,常常遇到类似如下的编译器错误信息: 未定义 文件中的 符号 在文件中 i /var/tmp//ccU4sj6I.o func /var/tmp//ccU4sj6I.o ld: 致命的: 符号参照错误. 没有输出被写入a.out collect2: ld returned 1 exit status ...

December 8, 2007 · 7 min · Tony Bai

成功Build ACE

近期公司实行新的绩效考核机制,我的考核目标中就有一项叫做:“成功使用新技术、框架、思路等至少3个”,呵呵,先不论绩效考核机制是否合理,既然已经这样了那就需要去适应。一直在做Network Application,早就知道ACE在业界中的名气,这回有理由找个时间好好挖掘一下ACE的思路,也为我的绩效目标增色啊^_^。 ...

June 14, 2007 · 5 min · Tony Bai

工作中的故事-0是'TRUE'还是'FALSE'?

这个故事源于今天测试组测出的一个BUG,BUG被测试人员转给了我,故事便从这里开始了。 我们的系统是一个后台服务器程序,用C写的,运行在Solaris上,数据存储在数据库中,每次系统启动都要从数据库中读取配置数据。系统根据配置数据对输入的消息数据进行处理。今天的这个BUG现象就是对于一定的输入消息,系统根据配置数据的指导进行处理,结果得到的结果本应该是A,但是却得到了B。 ...

January 17, 2007 · 3 min · Tony Bai