微信群发布网站建设,海会主机,品牌网站建设c重庆,许昌注册公司带有静态库或者动态库的工程的构建过程与上一节#xff08;#xff09;只包含一个源文件的工程的构建过程是类似的。只是对于复杂的工程#xff0c;如果包含多个还有源文件的目录时#xff0c;需要对每个包含源文件的目录执行构建过程#xff0c;另外创建和使用库文件时需…带有静态库或者动态库的工程的构建过程与上一节只包含一个源文件的工程的构建过程是类似的。只是对于复杂的工程如果包含多个还有源文件的目录时需要对每个包含源文件的目录执行构建过程另外创建和使用库文件时需要对configure.in和Makefile.am文件进行修改。 下面以工程libtest为例说明gcc创建和使用静态库、动态库的过程libtest目录结构和内容如图1所示其中三个文件hello.hhello.c和main.c的内容如下。 图1 libtest/include/hello.h #ifdef _HELLO_H_
#define _HELLO_H_void hello();#endif libtest/lib/hello.c #include hello.h
#include stdio.h
void hello()
{printf(hello world!\n);
} libtest/src/main.c #include hello.h
int main()
{hello();
} 使用静态库 构建的步骤在上一节中已经详细说明这里不再赘述这里与上一节不同的地方是configure.in和Makefile.am文件这里说说这两个文件怎么编写。 1lib/configure.in文件其他内容与上一节一样只需要在# Checks forlibraries后面增加一行内容AC_PROG_RANLIB表示构建当前目录时需要生成静态库文件。lib/configure.in文件的完整内容如图2所示 图2 2lib/Makefile.am是个关键文件内容如图3所示 图3 说明noinst_LIBRARIESlibhello.a表示生成静态库文件libhello.alibhello_a_SOURCES定义库文件libhello.a的源文件列表。 根据上一节中的步骤进行构建过程完成后将会在lib目录中生成静态库文件libhello.a。 3src/configure.in跟上一节一样没有需要特殊变动的。 4src/Makefile.am是个关键文件内容如图4所示 图4 说明noinst_PROGRAMSmain表示生成可执行程序mainmain_LDADD../lib/libhello.a表示为main程序添加库文件../lib/libhello.agcc进行链接过程时将会链接该静态库。 根据上一节中的步骤进行构建过程完成后将会在src目录中生成可执行程序main。 使用动态库 1lib/configure.in中在# Checks for libraries后面增加一行内容AC_PROG_LIBTOOL表示构建当前目录时需要生成动态库文件。lib/configure.in文件的完整内容如图5所示 图5 2lib/Makefile.am是个关键文件内容如图6所示 图6 说明lib_LIBRARIESlibhello.la表示生成动态库文件libhello.lalibhello_la_SOURCES定义库文件libhello.la的源文件列表。 根据上一节中的步骤进行构建过程完成后将会在lib目录中生成静态库文件libhello.la。 3src/configure.in跟上一节一样没有需要特殊变动的。 4src/Makefile.am是个关键文件内容如图7所示 图7 说明main_LDADD../lib/libhello.la表示为main程序添加动态库文件../lib/libhello.la。 5这里与静态库方法不同的是动态库文件需要安装我测试了一下好像不安装也可以的安装方法 a) 环境变量LD_LIBRARY_PATH指示动态连接器可以装载动态库的路径在链接动态库文件前设置该变量为库文件所在路径注意用export LD_LIBRARY_PATH”…”方式只是临时生效的如果要永久有效可以写入~/.bashrc文件中跟修改PATH类似exportLD_LIBRARY_PATH$LD_LIBRARY_PATH:”…”。 b) 当然如果有root权限的话也可以修改/etc/ld.so.conf文件将要添加的动态库搜索路径写入该文件中然后调用/sbin/ldconfig来达到同样的目的。 根据上一节中的步骤进行构建过程完成后将会在src目录中生成可执行程序main。 突然觉得我自己好啰嗦这么简单的东西写的这么复杂汗。。。 转载于:https://www.cnblogs.com/jiangu66/p/3155588.html