动静态链接库及make

翻译 2016年08月30日 15:32:27

linux 中的make命令使用

在制作动静态链接库时初次涉及到make和makefile这些东东,有点小乱小乱,查了写资料,来个小总结(汇总)

make 和makefile部分

详细讲解看链接点击打开链接http://www.jb51.net/LINUXjishu/339251.html

1.make 拥有可供编程的内置函数好,也有编译c语言项目的makefile等延伸语句命令。

代码变成可执行文件需要进行编译,但是需要先进行构建,而make 就是一个根据指定的shell命令进行构建的工具。

构建有一定的构建规则:你规定要构建那个文件,他依赖哪些源文件,当那些文件有变动是,如何重新构建它。

2.makefile文件的格式


构建规则都写在makefile文件里面,要学会make命令,就必须学会如何编写makefile文件

makefile文件由一系列的规则(rules)构成。

linux下怎么制作使用静态库:

首先在makefile文件中制作静态库:

 

(1)首先生成*.o文件,输入gcc  nini.c -o nini.o -c      //-c表示只编译不链接

(2)利用ar命令生成静态库,输入ar -rc libnini.a nini.o   //.o文件归档为lib+库名称,后缀名是.a的文件,然后在linux环境下进行make命令

(3)制作后,需要发布.a文件和.h文件

使用的时候:

.a.h的文件要运行的文件都放在同一个文件夹里面。在.c文件里面包含库.h之后直接使用库函数。在linux环境下直接输入(例如:第一步gcc test.c -o test -lnini -L.

第二步./test

 

如果还有一个hello.c文件使用到了这个静态库

1)首先输入gcc hello.c -o hello ./libtest.a

2)输入./hello,验证生成的执行文件是否正确(是)

3)朋友们可以删除libtest.a文件,(在上一步运行成功之后不要再进行编译,即不要输入gcc hello.c -o hello ./libtest.a了)直接重新输入./hello,验证执行文件是否可以正常运行。(可以正常运行)

linux下怎么制作使用动态库:

首先在makefile文件中制作动态库:

制作:gcc aston.c -o aston.o -c -fPIC

    gcc -o libaston.so aston.o -shared

编译的时候不能直接写gcc test.c -o test -laston -L.

三个解决方法:

1.将归档的lib+xxx.so文件放到/usr/lib/下,用cp命令即可

2.lib+xxx.so文件所在的目录导入到环境变量LD_LIBRARY_PATH.

即写入语句:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxxxxxxxxxx(上面的路径,通过pwd命令来寻找)

3.ldconfig

 

新命令:

ldd查看可执行文件运行时所依赖的动态库:(帮助我们解析这个函数用到了哪些函数库)

(1)ldd  可执行文件名

(2)readelf  -d   可执行文件名|grep  Shared

 

ldconfig 命令的用途:主要是在默认搜寻目录(/lib/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

构建规则都写在makefile文件里面,要学会make命令,就必须学会如何编写makefile文件

makefile文件由一系列的规则(rules)构成。

linux下怎么制作使用静态库:

首先在makefile文件中制作静态库:

 

(1)首先生成*.o文件,输入gcc  nini.c -o nini.o -c      //-c表示只编译不链接

(2)利用ar命令生成静态库,输入ar -rc libnini.a nini.o   //.o文件归档为lib+库名称,后缀名是.a的文件,然后在linux环境下进行make命令

(3)制作后,需要发布.a文件和.h文件

使用的时候:

.a.h的文件要运行的文件都放在同一个文件夹里面。在.c文件里面包含库.h之后直接使用库函数。在linux环境下直接输入(例如:第一步gcc test.c -o test -lnini -L.

第二步./test

 

如果还有一个hello.c文件使用到了这个静态库

1)首先输入gcc hello.c -o hello ./libtest.a

2)输入./hello,验证生成的执行文件是否正确(是)

3)朋友们可以删除libtest.a文件,(在上一步运行成功之后不要再进行编译,即不要输入gcc hello.c -o hello ./libtest.a了)直接重新输入./hello,验证执行文件是否可以正常运行。(可以正常运行)

linux下怎么制作使用动态库:

首先在makefile文件中制作动态库:

制作:gcc aston.c -o aston.o -c -fPIC

    gcc -o libaston.so aston.o -shared

编译的时候不能直接写gcc test.c -o test -laston -L.

三个解决方法:

1.将归档的lib+xxx.so文件放到/usr/lib/下,用cp命令即可

2.lib+xxx.so文件所在的目录导入到环境变量LD_LIBRARY_PATH.

即写入语句:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxxxxxxxxxx(上面的路径,通过pwd命令来寻找)

3.ldconfig

 

新命令:

ldd查看可执行文件运行时所依赖的动态库:(帮助我们解析这个函数用到了哪些函数库)

(1)ldd  可执行文件名

(2)readelf  -d   可执行文件名|grep  Shared

 

ldconfig 命令的用途:主要是在默认搜寻目录(/lib/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

rootfs做好之后需要动静态链接库

在roots做好之后,需要在/lib、/usr/lib等下面拷贝链接库文件 第一、为啥拷贝so文件?       因为程序需要,在编译的时候或是运行的时候需要库函数,而这些函数是共享的不需要每次都...

Visual C++动、静态链接库的常用链接方法介绍

方法介绍  方法一:windows提供了一套函数,用于加载动态链接库中的符号(函数和变量),调用步骤如下:   HINSTANCE LoadLibrary( LPCTSTR lpLib...

Activemq所需的动静态链接库文件

  • 2017年05月03日 16:45
  • 1.91MB
  • 下载

win32 静态链接库及测试程序

  • 2015年01月20日 15:21
  • 1.77MB
  • 下载

VC++:创建,调用Win32静态链接库

概述 DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。 仓库的发展史经历了"无库" ---> "静态链接库"  ...

静态链接库

  • 2014年11月07日 16:31
  • 42KB
  • 下载

静态链接库学习(VS2010)

  • 2013年02月27日 16:24
  • 659KB
  • 下载

C++中静态链接库创建与使用

演练:创建和使用静态库 (C++) Visual Studio 2013 其他版本 此分步演练演示如何创建用于 C++ 应用的静态...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动静态链接库及make
举报原因:
原因补充:

(最多只允许输入30个字)