Linux系统基础开发技术1:构建Linux 库文件
库时实际文件的名称. 同时,在编译器要求使用一个共享库时使用的名字称为linker name,一般都是去掉版本号的soname,用于gcc中-lname这样的选项的编译. 这几个名字的关系:你在创建实际库文件中指定libreadline.so.3.0为real name ,并且使用符号链接创建soname ->libreadline.so.3和linker name-> /usr/lib/libreadline.so. 放置位置: GNU标准推荐将所有默认的库安装在/usr/local/lib,这指的是开发者源代码默认的位置. FHS指出大多数的库文件应该放在/usr/lib,而启动所需的库则应该放在/lib中,而非系统库应该放在/usr/local/lib.这指的是发行版默认的位置,这两个标准并没有矛盾. 共享库的主要有三个步骤: 创建目标代码. gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ gcc -Wall -fPIC -c *.c 然后我们创建库文件: gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ gcc -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 *.o -shared选项指明生成共享目标文件,-W1(注意是小写L而不是一)指明传入链接器的参数,在此我们设定了该库的soname为libctest.so.1,-o则指明了生成的目标库文件为libctest.so.1.0(这个就是real name). 创建所需的符号链接: gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ sudo mv libctest.so.1.0 /usr/local/lib/libctest.so.1.0 创建的libctest.so就是上面所谓linker name,用于编译时-lctest选项. 创建的libctest.so.1就是soname,我们在上边说过程序在运行时需要这个名字的符号链接. 此时我们的共享库就建好了,接着我们编译程序: gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ gcc -Wall -L/usr/local/lib prog.c -lctest -o prog 我们编译完毕,该库并不会包含在可执行文件中,只有在执行时来会动态加载进来.我们可以通过ldd列出一个可执行程序所有的依赖,在我的系统中还找不到/usr/local/bin的路径: gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ ldd prog 此时,运行会报找不到库的错误: gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ ./prog 我们可以将所需库的路径加入到系统路径中,有三种方法可以完成: A.在/etc/ld.so.conf中加入所在路径,然后执行ldconfig配置链接器运行时绑定配置.你也可以创建一个文件,将路径写入,然后使用ldconfig –f filename将配置写入. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |