当一个程序写得特别特别大的时候,别人想用你的程序,如果每次都把庞大的*.c或*.cpp和*.h文件考走加到他自己的工程里面去,那工程量简直大得客观。如果你的程序还链接了各种奇怪的外部库的话,那么他可能就会陷入抓狂的编译失败当中。
链接库的出现很好地解决了这个问题。在dev-cpp里面,选择生成链接库文件非常简单,只需要在工程文件——>右键——>option菜单——>option界面下调整就可以了
选择Win32 Static Lib后,文件只能编译,但是不能运行,生成文件Project1.a
选择Win32 DLL后,文件能编译和运行,声称该文件Project.dll
想要外部库使用程序所提供的函数,得给程序写个头文件,并配对相应的*.c或*.cpp文件。例如添加Project1.h和Project1.c,在Project1.h中如下:
#ifndef PROJECT1_H |
而在Project1.c中有具体startmain的函数实现。
那么在编译完成后,就会有Project1.a或者Project1.dll。别的程序链接的时候,就跟使用那些方便的类库一样,在需要链接的程序的工程文件中添加Project1.h头文件,在编译器里的链接选项加上 -lProject1。不过此时需要把Project1改成名字成libProject1。名字不能变,一定要跟lib***.a长得一样才不会出错。例如:libProject1.a、libProject1.dll
dll优势大大地有,各种类库完全封装在里面,即使程序本身链接过其他类库也没有关系,加入头文件后不需要再引用其他。例如一个带有socket功能的dll文件,不需要重新链接-lw2_32。
而*.a文件就不行,不但需要链接-lProject1,还得链接其他类库,如-lw2_32。如果被链接的类库特别都,那就麻烦了。
链接类库重新编译请务必改下代码,在//里面改改都好,或者删除.o文件,不然会傻逼,重复错误。
离开dll的exe无法执行,必须放在同一个目录下面。