g++库的生成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011676589/article/details/18048595



生成共享库 要先生成目标文件 然后才能生成共享库
第一步:g++ -c *.cpp -I ../inc -g -Wall  //编译生成目标文件.o -I是指定要包含的头文件 -g 在目标文件中包含debug信息 -wall 打开所有警告信息
第二步:g++ -shared say_hello.o say_goodbay.o -o ../lib/libspeak.so //把say_hello.o和say_goodbay.o编译生成共享库文件libspeak.so
第二步:ld -­G ­-o  say_goodby.o say_hello.o ../lib/libspeak.so

--------------------------------------------------------------------------------------------------------------------

生成静态库, 也是先生成目标文件 然后才能生成静态库
第一步:g++ ­-c say_goodbye.cpp ­I"../inc"    //-I就是指定所要需要
       g++ ­-c say_hello.cpp ­I"../inc"  //生成两个.o文件
第二步:ar ­-r ../lib/libspeak_a.a say_goodbye.o say_hello.o//生成静态库  后面是生成路径  //这里的位置是不能调换的
--------------------------------------------------------------------------------------------------------------------
//共享库是你编译的时候要用到他,运行的时候也要用到他,因为你程序的一部分功是在共享库里面,运行时也依赖于这个库,
//静态库是你编译用到他,但是运行时不会用到他,因为你那个可执行程序已经拷贝到你的可执行程序中啦, 就不需要你说的那个库啦;

调用共享库:
第一种形式:g++ ­ test_drv.cpp ­-o test_drv -I"../inc" -l speak ­-L"../lib" //g++编译test_drv.cpp生成test_drv可执行程序,指定调用../目录下的下的speak库

//运行的时候,要调用共享库   //导入环境变量
export LD_LIBRARY_PATH="../lib:$LD_LIBRARY_PATH"
--------------------------------------------------------------------------------------------------------------------
调用静态库
第一种:
g++ -­o test_drv test_drv.cpp ­-I"../inc" ­-L"../lib" -lspeak_a  //编译test_drv.cpp文件生成test_drv 指定要包含的头文件目录../inc,要链接../inc目录下的speak库
第二种:
g++ -­o test_drv test_drv.cpp ­-I"../inc" ../lib/libspeak_a.a  // //直接指定

//编译生成的

//运行的时候不要库的依赖

-l//连接到共享库  后面跟的库speak 就是找libspeak ,生成这个库的时候必须是lib开头,否则他就不能被识别  注意 共享库和静态库是编译的源文件
-L指定连接的库所在的路径  其默认制定/usr/lib 、 /usr/local/lib 或由 LD_LIBRARY_PATH 指定的目录下 ,也就是说你不加也默认搜索这些库


--------------------------------------------------------------------------------------------------------------------
//


-64系统编译的库或者可执行文件时,要加 -fpic选项

//共享库的运行期路径问题  就是你运行的时候不指定共享库的路径 也能运行
第一种:是是把共享库拷贝到/usr/lib 、 /usr/local/lib 目录下就可以
第二种:LD_LIBRARY_PATH 指定的目录下,LD_LIBRARY_PATH环境变量,要保存到./bashrc文件中   别的系统要拷贝到./profile文件中
第三种:使用 ldconfig 机制
      在 /etc/ld.so.conf.d/ 下创建一个 .conf 文件,如 libspeak.conf
      内容为共享库所在目录的绝对路径 这个libspeak是和你那个创建的库名字是一致的  这个绝对路径是 /所在的目录,就是root所在的那个目录
      然后,运行 ldconfig










展开阅读全文

没有更多推荐了,返回首页