减肥瘦身网站模板源码,wordpress 首页文章,网站域名注册基本流程,公司网站如何做维护-l参数就是用来指定程序要链接的库#xff0c;-l参数紧接着就是库名#xff0c;那么库名跟真正的库文件名有什么关系呢#xff1f;就拿数学库来说#xff0c;他的库名是m#xff0c;他的库文件名是libm.so#xff0c;很容易看出#xff0c;把库文件名的头lib和尾.so去掉… -l参数就是用来指定程序要链接的库-l参数紧接着就是库名那么库名跟真正的库文件名有什么关系呢就拿数学库来说他的库名是m他的库文件名是libm.so很容易看出把库文件名的头lib和尾.so去掉就是库名了 好了现在我们知道怎么得到库名当我们自已要用到一个第三方提供的库名字libtest.so那么我们只要把libtest.so拷贝到/usr/lib里编译时加上-ltest参数我们就能用上libtest.so库了当然要用libtest.so库里的函数我们还需要与libtest.so配套的头文件 放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了但如果库文件没放在这三个目录里而是放在其他目录里这时我们只用-l参数的话链接还是会出错出错信息大概是“/usr/bin/ld: cannot find -lxxx”也就是链接程序ld在那3个目录里找不到libxxx.so这时另外一个参数-L就派上用场了比如常用的X11的库它在/usr/X11R6/lib目录下我们编译时就要用-L/usr/X11R6/lib -lX11参数-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下那链接参数就是-L/aaa/bbb/ccc -ltest 另外大部分libxxxx.so只是一个链接以RH9为例比如libm.so它链接到/lib/libm.so.x/lib/libm.so.6又链接到/lib/libm-2.3.2.so 如果没有这样的链接还是会出错因为ld只会找libxxxx.so所以如果你要用到xxxx库而只有libxxxx.so.x或者libxxxx-x.x.x.so做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so 手工来写链接参数总是很麻烦的还好很多库开发包提供了生成链接参数的程序名字一般叫xxxx-config一般放在/usr/bin目录下比如 gtk1.2的链接参数生成程序是gtk-config执行gtk-config --libs就能得到以下输出-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm这就是编译一个gtk1.2程序所需的gtk链接参数xxx-config除了--libs参数外还有一个参数是--cflags用来生成头文件包含目录的也就是-I参数在下面我们将会讲到。你可以试试执行gtk-config --libs --cflags看看输出结果 现在的问题就是怎样用这些输出结果了最笨的方法就是复制粘贴或者照抄聪明的办法是在编译命令行里加入这个xxxx-config --libs --cflags比如编译一个gtk程序gcc gtktest.c gtk-config --libs --cflags这样就差不多了。注意不是单引号而是1键左边那个键。 5、-include和-I参数 -include用来包含头文件但一般情况下包含头文件都在源码里用#include xxxxxx实现-include参数很少用。-I参数是用来指定头文件目录/usr/include目录一般是不用指定的gcc知道去那里找但是如果头文件不在/usr/include里我们就要用-I参数指定了比如头文件放在/myinclude目录里那编译命令行就要加上-I/myinclude参数了如果不加你会得到一个xxxx.h: No such file or directory的错误。-I参数可以用相对路径比如头文件在当前目录可以用-I.来指定。