2005年04月19日

For linux

1, gcc -c primitive.c -o primitive.o

2,ar -r primitive.a primitive.o

extract

ar -x primtive.a

For windows

cl primitive.c /c

lib  primitive.obj

Note, cl got /link option to pass parameters to link.exe

对于windows:

1,cl primitive.c codec.c application.c /c to generate .obj

2, link primitive.obj /DLL /DEF:primitive.def  This will generate several files. .lib is used to build dlls or exes that refer to primitive.dll.

3, link codec.obj primitive.lib /DLL /DEF:codec.def

4, link application.obj primitive.lib codec.lib

Though codec.dll refer to primitive.dll, there is no order must-bes.

5, dumpbin /exports primitive.lib             you can see that primitive lib export primitive_print function

关于linux

产生so

gcc -g -s -shared -W1,-soname,codec.so -o codec.so codec.o

 gcc -g -s -shared -W1,-soname,prim.so -o prim.so prim.o

使用so

 gcc application.c -o application.exe -L. prim.so codec.so -Wl,-rpath

There is no order must-bes.


2005年04月14日

1,如果所依赖文件比target新,或者没有target,执行后面的命令;对于label要在make命令行中,显示的指定出来执行,如clean。

2,把所有需要link的obj放在一个宏里,需要link的lib也一样

3,对于.o的target,可以省略同名的.c文件和gcc -c xxx.c 这样的命令

4,在命令之前加上"-",则忽略错误。命令要以tab开头

5,all : target1 target2 target 3…,执行make后可以一下生成多个目标。也可以指定all为phony,只需要输入make all

6,,“$<”表示所有的依赖,“$@”表示目标集

2005年04月12日

创建引用有两种方法:

1,$aref=\@a

2,匿名引用 $aref=[1,"a","b"]  {}则代表匿名散列

析值:

1,带有大括号的引用相当于数组名

@a=@{$aref}

2, ${$aref}[3]相当于$aref->[3]  指数组a的第四个元素 和$aref[3]完全不同,后者是指aref数组的第四个元素

举例:

1   my %table;
    2   while (<>) {
    3    chomp;
    4     my ($city, $country) = split /, /;
    5     $table{$country} = [] unless exists $table{$country};  //创建一个空的匿名数组的引用,存储在$table{$country} 中
    6     push @{$table{$country}}, $city;   {匿名数组引用}将恢复数组名。
    7   }
    8   foreach $country (sort keys %table) {
    9     print "$country: ";
   10     my @cities = @{$table{$country}};
   11     print join ’, ’, sort @cities;
   12     print ".\n";
   13   }