《Linux高级程序设计》2nd version,杨宗德
1. 杂问
* http://www.maigoo.com/maigoo/134qb_index.html
* 写一个Chat的例子(Tica)
* server-side目前使用的主要工具及版本:内核?GCC/GDB?
* 目前用到的所有server-side开发需要的工具、环境、流程与步骤等等?
* 调试与跟踪相关的机制,日志文件?
* putty联VMWare的时候,如何避免中文乱码?
A:使用echo $LANG查出编码为UTF8,将putty session的translation属性设为UTF8,OK! 2011/12/19
另,Putty使用东东:http://www.cnblogs.com/tippoint/archive/2010/09/21/1832639.html
2. gcc
* gcc参数
-E:生成包含文件,如gcc -E hello.c -ohello.i
* gcc处理cpp程序,不会自动生成执行文件,只有g++会生成
* #include自定义头文件只能使用"",否则需要使用-I引入
^ 什么意思? 2011/12/12
^ 意思是指定include文件的目录,是“I”(AI)而非“l" 2011/12/19
3. make
* PHONY:指明伪目标
一旦指明一个目标是伪目标,则 make ”伪目标名“方式执行的时候,不会混淆,即使有同名文件存在的情况下也是如此。2011/12/19
all: prog1 prog2 prog3
.PHONY all
prog1: prog1.o util.o
...
prog2: prog2.o util.o
...
prog3: prog3.o util.o
...
...
注:make命令将生成三个不同程序
* VPATH与vpath
4. gdb
编译时加上-g开关
Q:p argv[0]为何找不到变量argv?
5. static lib
ar rc libhello.a libhello.o
6. shared lib
[root@frank shared-lib]# gcc -g -shared -Wl, -soname, libhello.so.1.0 -o libhello.so lib.o -lc
gcc: libhello.so.1.0:没有那个文件或目录
gcc: 无法识别的选项‘-soname,’
[root@frank shared-lib]# g++ -g -shared -Wl, -soname, libhello.so.1.0 -o libhello.so lib.o -lc
g++: libhello.so.1.0:没有那个文件或目录
g++: 无法识别的选项‘-soname,’
Q:是否需要使用gcc而非g++?
暂时不用-soname,直接生成.so
[root@frank shared-lib]# g++ lib.cpp -fPIC -shared -o libhello.so
[root@frank shared-lib]# g++ lib-test.cpp -o lib-test -lhello -L./
[root@frank shared-lib]# ./lib-test
./lib-test: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory
Q:文件已经存在,Why找不着?
[root@frank shared-lib]# ldd lib-test
linux-gate.so.1 => (0x00d4b000)
libhello.so => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0055b000)
libm.so.6 => /lib/i686/nosegneg/libm.so.6 (0x00b61000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x006e9000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x00a1c000)
/lib/ld-linux.so.2 (0x009ff000)