【背景】
折腾完:
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译xmlrpc
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译curl(libcurl)
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译libxml2
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译expat
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译log4c
再去交叉编译libcgi。
【折腾过程】
1.继续参考之前自己的:
【记录】cygwin下用arm-xscale-linux-gnueabi交叉编译libcgi
2.先拿到全新的源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | crifan@ubuntu:libcgi-1.0$ pwd /home/crifan/develop/crosscompile/libcgi/libcgi-1 .0 crifan@ubuntu:libcgi-1.0$ ls -lh total 104K -rwxrwxrwx 1 crifan root 58 Jan 20 2013 AUTHORS -rwxrwxrwx 1 crifan root 62 Jan 20 2013 autogen.sh -rwxrwxrwx 1 crifan root 204 Jan 20 2013 BUGS -rwxrwxrwx 1 crifan root 5.1K Jan 20 2013 ChangeLog -rwxrwxrwx 1 crifan root 44K Jan 20 2013 configure -rwxrwxrwx 1 crifan root 206 Jan 20 2013 configure. in drwxrwxrwx 4 crifan root 4.0K Aug 9 00:45 doc drwxrwxrwx 8 crifan root 4.0K Aug 9 00:45 examples -rwxrwxrwx 1 crifan root 4.7K Jan 20 2013 install -sh -rwxrwxrwx 1 crifan root 2.4K Jan 20 2013 Makefile. in -rwxrwxrwx 1 crifan root 613 Jan 20 2013 README drwxrwxrwx 2 crifan root 4.0K Aug 9 00:45 src -rwxrwxrwx 1 crifan root 645 Jan 20 2013 THANKS -rwxrwxrwx 1 crifan root 500 Jan 20 2013 TODO crifan@ubuntu:libcgi-1.0$ |
3.然后配置之前,去注意不要加CC,用如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | crifan@ubuntu:libcgi-1.0$ mkdir /opt/crosscompile/libcgi crifan@ubuntu:libcgi-1.0$ . /configure --prefix= /opt/crosscompile/libcgi --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi creating cache . /config .cache checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for a BSD compatible install ... /usr/bin/install -c checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes updating cache . /config .cache creating . /config .status creating Makefile creating src /config .h src /config .h is unchanged crifan@ubuntu:libcgi-1.0$ |
4.然后编译之前,参考:
去修改文件:
libcgi-1.0\src\string.c
中的587行的,从:
1 | va_copy(bkp, str); |
改为:
1 2 | //va_copy (bkp, str); va_copy(bkp, ptr); |
同时,之前已经对于prefix的目录,新建过了:
1 | crifan@ubuntu:libcgi-1.0$ mkdir /opt/crosscompile/libcgi |
所以,不用修改makefile,确保后期make install是OK的。
5.然后再去make,且加CC参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | crifan@ubuntu:libcgi-1.0$ make CC=arm-xscale-linux-gnueabi-gcc arm-xscale-linux-gnueabi-gcc -c -o src /error .o src /error .c arm-xscale-linux-gnueabi-gcc -c -o src /cgi .o src /cgi .c arm-xscale-linux-gnueabi-gcc -c -o src /session .o src /session .c arm-xscale-linux-gnueabi-gcc -c -o src /base64 .o src /base64 .c arm-xscale-linux-gnueabi-gcc -c -o src /md5 .o src /md5 .c arm-xscale-linux-gnueabi-gcc -c -o src /string .o src /string .c arm-xscale-linux-gnueabi-gcc -c -o src /general .o src /general .c arm-xscale-linux-gnueabi-gcc -c -o src /list .o src /list .c arm-xscale-linux-gnueabi-gcc -c -o src /cookie .o src /cookie .c ar rc src /libcgi .a src /error .o src /cgi .o src /session .o src /base64 .o src /md5 .o src /string .o src /general .o src /list .o src /cookie .o arm-xscale-linux-gnueabi-gcc -shared -o src /libcgi .so src /error .o src /cgi .o src /session .o src /base64 .o src /md5 .o src /string .o src /general .o src /list .o src /cookie .o +---------------------------------------+ | Thanks for using LibCGI | +---------------------------------------+ | LibCGI is getting better because | | people like you are using it. So, if | | LibCGI is helping you in some way, | | please help us to improve it, sending | | suggestions, bug reports, bug fixes, | | and specially improvment code. | | You can subscribe to the mailing list | | or send a mail to the author. | +---------------------------------------+---------------------------+ | List: http: //lists .sourceforge.net /lists/listinfo/libcgi-general | +-------------------------------------------------------------------+ crifan@ubuntu:libcgi-1.0$ |
6.然后去安装:
1 2 3 4 5 | crifan@ubuntu:libcgi-1.0$ make install cp src /libcgi .a /opt/crosscompile/libcgi/lib cp src /libcgi .so /opt/crosscompile/libcgi/lib cp src /cgi .h /opt/crosscompile/libcgi/include cp src /session .h /opt/crosscompile/libcgi/include |
再去确认一把,结果,还是很坑爹,是错的:
1 2 3 4 5 6 7 8 9 | crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/ include lib crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/ -lh total 48K -rwxrwxr-x 1 crifan crifan 1.1K Aug 9 00:52 include -rw-rw-r-- 1 crifan crifan 44K Aug 9 00:52 lib crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/include -lh -rwxrwxr-x 1 crifan crifan 1.1K Aug 9 00:52 /opt/crosscompile/libcgi/include crifan@ubuntu:libcgi-1.0$ |
7.所以,继续去删除旧的,重新拷贝:
其中修改Makefile为:
1 2 3 4 5 6 7 | install : mkdir -p $(LIBDIR) cp src /libcgi .a $(LIBDIR) cp src /libcgi .so $(LIBDIR) mkdir -p $(INCDIR) cp src /cgi .h $(INCDIR) cp src /session .h $(INCDIR) |
过程为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | crifan@ubuntu:libcgi-1.0$ rm /opt/crosscompile/libcgi/lib crifan@ubuntu:libcgi-1.0$ rm /opt/crosscompile/libcgi/include crifan@ubuntu:libcgi-1.0$ mkdir /opt/crosscompile/libcgi/inclue crifan@ubuntu:libcgi-1.0$ mkdir /opt/crosscompile/libcgi/lib crifan@ubuntu:libcgi-1.0$ make install cp src /libcgi .a /opt/crosscompile/libcgi/lib cp src /libcgi .so /opt/crosscompile/libcgi/lib cp src /cgi .h /opt/crosscompile/libcgi/include cp src /session .h /opt/crosscompile/libcgi/include crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/ -lh total 12K -rwxrwxr-x 1 crifan crifan 1.1K Aug 9 00:54 include drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 inclue drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 lib crifan@ubuntu:libcgi-1.0$ rm /opt/crosscompile/libcgi/include crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/ -lh total 8.0K drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 inclue drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 lib crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/lib/ -lh total 88K -rw-rw-r-- 1 crifan crifan 43K Aug 9 00:54 libcgi.a -rwxrwxr-x 1 crifan crifan 44K Aug 9 00:54 libcgi.so crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/inclue/ -lh total 0 crifan@ubuntu:libcgi-1.0$ gedit Makefile crifan@ubuntu:libcgi-1.0$ make install mkdir -p /opt/crosscompile/libcgi/lib cp src /libcgi .a /opt/crosscompile/libcgi/lib cp src /libcgi .so /opt/crosscompile/libcgi/lib mkdir -p /opt/crosscompile/libcgi/include cp src /cgi .h /opt/crosscompile/libcgi/include cp src /session .h /opt/crosscompile/libcgi/include crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/ -lh total 12K drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:57 include drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 inclue drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 lib crifan@ubuntu:libcgi-1.0$ rm /opt/crosscompile/libcgi/inclue -fR |
8.最后验证才是对的:
1 2 3 4 5 6 7 8 9 10 11 12 13 | crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/ -lh total 8.0K drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:57 include drwxrwxr-x 2 crifan crifan 4.0K Aug 9 00:54 lib crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/include/ -lh total 12K -rwxrwxr-x 1 crifan crifan 4.3K Aug 9 00:57 cgi.h -rwxrwxr-x 1 crifan crifan 1.1K Aug 9 00:57 session.h crifan@ubuntu:libcgi-1.0$ ls /opt/crosscompile/libcgi/lib -lh total 88K -rw-rw-r-- 1 crifan crifan 43K Aug 9 00:57 libcgi.a -rwxrwxr-x 1 crifan crifan 44K Aug 9 00:57 libcgi.so crifan@ubuntu:libcgi-1.0$ |
【总结】
在Ubuntu下,交叉编译libcgi:
准备工作:
1. 去修改文件:
libcgi-1.0\src\string.c
中的587行的,从:
1 | va_copy(bkp, str); |
改为:
1 2 | //va_copy (bkp, str); va_copy(bkp, ptr); |
以此避免:
2.去修改Makefile
从:
1 2 3 4 5 | install : cp src /libcgi .a $(LIBDIR) cp src /libcgi .so $(LIBDIR) cp src /cgi .h $(INCDIR) cp src /session .h $(INCDIR) |
变为:
1 2 3 4 5 6 7 | install : mkdir -p $(LIBDIR) cp src /libcgi .a $(LIBDIR) cp src /libcgi .so $(LIBDIR) mkdir -p $(INCDIR) cp src /cgi .h $(INCDIR) cp src /session .h $(INCDIR) |
以此避免:
后面make install时,会误将要安装的文件,不是拷贝到include和lib目录,而是拷贝成include和lib两个文件了。
过程:
1.配置:
1 | . /configure --prefix= /opt/crosscompile/libcgi --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi |
2.编译:
1 | make CC=arm-xscale-linux-gnueabi-gcc |
3.安装:
1 | make install |
1 | |