1、在Linux下,动态库和静态库同事存在时,gcc/g++的链接程序,默认链接的动态库。
可以使用下面的方法,给连接器传递参数,看是否链接动态库还是静态库。
-WI,-Bstatic -llibname //指定让gcc/g++链接静态库
使用:
gcc/g++ test.c -o test -WI,-Bstatic -llibname
-WI,-Bdynamic -llibname //指定让gcc/g++链接动态库
使用:
gcc/g++ test.c -o test -WI,-Bdynamic -llibname
如果要完全静态加在,使用-static参数,即将所有的库以静态的方式链入可执行程序,这样生成的可执行程序,不再依赖任何库,同事出现的问题是,这样编译出来的程序非常大,占用空间。
2、Linux下动态库为什么会出现编译OK,运行时找不到的情况。
原因是:
linux下链接器默认是不记录库的搜索路径的,只记录名字,所以才会有编译时OK,但运行时,找不到的情况。
解决方法:
想在程序中记录路径,可以使用-WI,-rlibpath指定动态库的搜索路径。
使用方法。
gcc/g++ test.c -o test -WI,rlibpath -llibname
3、关于Linux下库的更多问题,可以参看:
自己的博客: http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520101023104745738/
http://xiaobin.net/200911/analytics-on-unix-static-and-dynamic-library/