内容提示:编译transmission0.2
关键字: 手写Makefile,测试Makefile,确定编译错误要点,修正源文件,正确处理头文件依赖
上次是决定了好好的开始研究Linux的编程技术。陆陆续续把Virual Box3.1.8 和fedora 12给装了上去,配置了共享目录。下载了transmission的1.7的代码,试着编译了一下,
./configure
make
OMG生成了一大片的lib依赖问题,虽然安装了openssl和一些其他库之后,编译过程很perfect,但是觉得有点无聊。因为太简单了,好像没有一点提高(通过设置configure 参数可以debug,问了QQ群的帮主)。而且transmission也是有点大的 ,不利于开始学习。柿子要拣软的捏啊
OK,下载Transmission-0.2,解压之后,有点傻眼没有Makefile。犹豫了一天之后决定手写makefile,这星期二晚上看那个陈皓《跟我一起写makefile》从9点看到11点,看了大概二三十页的样子,就动手写(之前看过一些makefile的教材)。有参考了别的源代码的makefile的东西。
解决问题一:Makefile的gcc -c -o
Makefile中间最重要的命令
$(OBJECTS): %o: %c
$(CC) -c $< -o -@ (如果有读者看的话,我很sorry,我发现我没办法将这个问题重现了)
也就是编译 *.c 强制生成*.o(这样做有一个问题如果编译不过的话,就会将编译过程中的报错信息放入.o中,生成只有几个字节的o文件)
首先是对libtransmission中文件的编译,最后打成一个a文件。OK,没有报错,然后编译transmissioncli.c。连接生成的a文件,形成新的a.out文件。但是transmission凡是连接到a文件的函数全部报错找不到地址。偶然间将 -o这个参数去掉,报错很多很多.注意到之前生成的.o文件只有几十字节.
解决问题二:头文件依赖
这个一个大的问题,中间出现了很多症状。其中包括
1。“error: expected ‘)’ before ‘*’ token” ,
2。“error: ‘benc_val_t’ undeclared (first use in this function)”
3。“too many arguments to function ‘tr_bencLoad’”
4。“expected declaration specifiers or ‘...’ before ‘benc_val_t’”
5。“expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token”
6。“too many arguments to function ‘tr_bencLoad’”
7。 (概述)tr_torrent_t未声明 tr_io_t。
这些都是编译时候,显示的错误。都是一些头文件依赖问题。需要一点一点纠正。有一些头文件我觉得是很无奈的问题。
比如tracker.h 头文件。tr_tracker_t定义中含有tr_torrent_t,,而tr_torrent_t又含有tr_tacker_t。头文件互相引用,就像计算机死锁一样。
进行代码的调整,头文件的调整。很繁琐的过程。这个东西做过了,现在发现了我应该好好的记录遇到的错误。
一个星期了transmission的编译问题终于解决了,下边要做的事情就是调试,学会使用以前没用过的东西,比如sha1这些东东 属于openssl的东西