一、在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为:

gcc test.cpp -L. -ltestlib

如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库则使用:

gcc test.cpp -L. -static -ltestlib

使用静态库进行连接。

 

二、当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式。这时需要作用-Wl的方式:

gcc test.cpp -L. -Wl,-Bstatic -ltestlib  -Wl,-Bdynamic -ltestlib 

另外还要注意系统的运行库使用动态连接的方式,所以当动态库在静态库前面连接时,必须在命令行最后使用动态连接的命令才能正常连接

,如:

gcc test.cpp -L. -Wl,-Bdynamic -ltestlib -Wl,-Bstatic -ltestlib  -Wl,-Bdynamic 

 

 

一部分静态连接,一部分动态连接的方法是:-Wl,-dn后面是静态链接-Wl,-dy后面是动态连接,具体如下:

cc -g -o test_server  main_server.o main_db.o err_me.o -Wl,-dn -L/usr/local/mysql/lib/ -l    mysqlclient  -Wl,-dy -lpthread -lm -ldl -lcrypt

  总结:gcc很强大,自己学的只有皮毛,以后还要多用才行。

 

明确指定哪些库文件动态链接、哪些库文件静态链接:

g++ -static  -o echo.fcgi echo_adaptor.o echo.o -Wl,-Bstatic -L/usr/local/lib/ -lfastcgipp -L/home/chu/lib/ -lwebframework -L/usr/local/lib/ -lctemplate_nothreads -Wl,-Bdynamic -L/usr/lib/ -lboost_thread -pthread -lboost_system -lboost_date_time -L/usr/lib64/mysql/ -lmysqlclient -L/lib64/ -lrt -Wl,-R/usr/local/lib/ -Wl,-R/usr/lib/ -Wl,-R/usr/local/lib/ 

 

Posted on 2017-08-11 16:35  旅途  阅读(676)  评论(0编辑  收藏  举报