linux中编译静态库(.a)和动态库(.so)的基本方法_onlyyou.docxVIP

  • 10
  • 0
  • 约1.6千字
  • 约 4页
  • 2021-04-13 发布于天津
  • 举报

linux中编译静态库(.a)和动态库(.so)的基本方法_onlyyou.docx

linux中编译静态库(.a)和动态库(.so)的基本方法_only you linux中编译静态库(.a)和动态库(.so)的基本方法 2007-10-24 14:19 静态库 在 linux 在 linux 环境 中 , 使用 ar 命令创建静态库文件 .如下 是命令的选项 : d 从指定的静态库文件中删除文件 把文件移动到指定的静态库文件中 p 把静态库文件中指定的文件输出到标准输 快速地把文件追加到静态库文件中 把文件插入到静态库文件中 t 显示静态库文件中文件的列表 x 从静态库文件中提取文件 还有多个修饰符修改以上基本选项 ,详细请 man ar 以下列出三个 : 把新的目标文件(*.o)添加到静态库文件中 现有文件之后 b *************************************** 之前 v 使用详细模式 ar 命令的命令行格式如下 ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files... 参数 archive 定义库的名称 , files 是库文件中包含的目标文件 的清单 , 用空格分隔每个文件 . 比如创建一个静态库文件的命令如下 ar r libapue.a error.o errorlog.o lockreg.o 这样就了 libapue.a 静态库文件 , 可以用 t 选项显示包含在 库中的文件 创建库文件之后 ,可以创建这个静态库文件的索引来 帮助提高和库连接的其他程序的编译速度 .使用 ranlib 程序 创建库的索引 ,索引存放在库文件内部 . ranlib libapue.a 用 nm 用 nm 程序显示存档文件的索引 ,它可以显示目标文件的符号 nm libapue.a | more 如果是显示目标文件的符号 nm error.o | more 如何使用呢 ? 如下所示 : 中的函数了 . 中的函数了 . 这样就可以在 test.c 中调用在 libapue.a 动态库 1.创建共享库 gcc -shared -o libapue.so error.o errorlog.o 这样就创建了共享库 ! 2.编译共享库 假设共享库位于当前目录 (即跟程序文件相同的目录中 gcc -o test -L. -lapue test.c 这样就编译出了不包含函数代码可执行文件了 ,但是但你运 行时会发现 linux 动态加载器打不到 libapue.so 文件 . 可以用 ldd 命令查看可执行文件依赖什么共享库 ldd test 如何才能让动态加载器发现库文件呢 ? 有两种方法可以解决 : LD_LIBRARY_PATH 环境变量 /etc/ld.so.conf 文件 1.环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. 2.修改 /etc/ld.so.conf 文件.位于 /etc/ld.so.conf 般应用程序的库文件不与系统库文件放在同一个目录下 般把应用程序的共享库文件放在 /usr/local/lib 下 ,新建一个 属于自己的目录 apue, 然后把刚才 libapue.so 复制过去就行 同时在 /etc/ld.so.conf 中新增一行 : /usr/local/lib/apue 以后在编译程序时加上编译选项 -L/usr/local/lib/apue -lapue 这样就可以使用这个 libapue.so 共享库了 !! 全文结束 !! 写此文章参考了 :lt;lt;Professional Assembly Languagegt;gt;. 这是一本好书 !如果是学习 ATamp;T 汇编语法 ,建议 阅读此书 !!

文档评论(0)

1亿VIP精品文档

相关文档