用automake建立共享库(动态链接库)Makefile
要使用automake工具包建立一个交叉编译的共享库的Makefile
这里用的autoconf是2.67版本,在debian下实现:
如果版本低,可以用apt-get install automake来装最新的版本,还需要libtool,也需要用apt-get install来安装。
这里建立一个简单的函数库来介绍:
建立目录rx,及源码目录src:
$mkdir rx/src
在rx/src下编辑rx.c,rx.h两个源文件:
#ifndef __RX_H_
#define __RX_H_
int fun();
#endif
mybdebian:/home/myb/php/rx/src# cat rx.c
#include "rx.h"
int fun()
{
return 1234;
}
在rx目录和rx/src目录下分别建立Makefile.am文件
rx目录下的Makefile.am为顶层Makefile.am文件,只要包含其存放源码的子目录即可,内容如下:
SUBDIRS=src
rx/src目录下的Makefile.am内容如下:
lib_LTLIBRARIES=librx.la
librx_la_SOURCES=rx.c
其中lib_LTLIBRARIES=后面的“librx.la”为要生成的库文件名,必须写成.la,不能是.so,实际会生成librx.so文件。
下面的librx_la是librx.la把“.”换成下划线“_”后面加上“_SOURCES=”,等号以后为源文件名称,多于一个时用空格隔开。
include_HEADERS=后面的为头文件,是供其它程序包含用的,make install时会复制到安装目录的include 目录中。
回到上层目录,使用autoscan扫描源码目录:
$ls
autoscan.log configure.scan Makefile.am src
把configure.scan改名成为configure.ac
src/Makefile])
编译这个文件:
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.67])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/rx.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile
src/Makefile])
AC_OUTPUT
修改AC_INIT一句,即把包的全名、版本号及BUG报告email地址添上,如:
在它后面加一句:
这句话是必须的。
由于这个脚本是用于生成共享库的,所以要加一句AC_PROG_LIBTOOL在AC_PROG_CC的下一行:
AC_PROG_CC
AC_PROG_LIBTOOL
修改后面的那个AC_CONFIG_FILES语句,改成AC_OUTPUT,并把后面的一条AC_OUTPUT去掉:
src/Makefile])
这样,configure.ac就建好了,修改后的内容如下:
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.67])
AC_INIT(rx2dlib,0.01,resound@163.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/rx.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT([Makefile
src/Makefile])
然后按顺序执行:
$autoconf
$autoheader
$libtoolize --automake
$automake –-add-missing
configure.ac:13: installing `./config.guess'
configure.ac:13: installing `./config.sub'
configure.ac:6: installing `./install-sh'
configure.ac:6: installing `./missing'
src/Makefile.am: installing `./depcomp'
这时configure脚本已经生成了。
可以用它来配置生成Makefile了。
如我们要生成交叉编译给ARM CPU使用的共享库,这里假设我们要使用的编译器为arm-none-linux-gnueabi-gcc,并且我们最终在ARM板上执行时,要把库安装到目标板的/usr/local/armrx2d目录中去。可以这样配置:
$make
Make完成后可以到src目录下面的一个隐藏目录.libs目录中看到生成的库文件:
总计 20
-rw-r--r-- 1 root root 2368 04-19 22:48 librx.a
lrwxrwxrwx 1 root root 11 04-19 22:48 librx.la -> ../librx.la
-rw-r--r-- 1 root root 930 04-19 22:48 librx.lai
lrwxrwxrwx 1 root root 14 04-19 22:48 librx.so -> librx.so.0.0.0
lrwxrwxrwx 1 root root 14 04-19 22:48 librx.so.0 -> librx.so.0.0.0
-rwxr-xr-x 1 root root 5422 04-19 22:48 librx.so.0.0.0
-rw-r--r-- 1 root root 2228 04-19 22:48 rx.o
我们再回到顶层目录,执行make install可以自动安装生成的库到/usr/local/armrx2d/lib目录下。
若使用automake时出现下面错误信息
required file `./ltmain.sh' not found
是因为libtool未配置:
解决办法:
$libtoolize --automake --debug --copy –force
或:
$libtoolize --automake
用automake建立共享库(动态链接库)Makefile相关推荐
- linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库
Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...
- linux中安装,编译时调用,运行时调用,更新共享库
一 创建并编译共享库 动态链接库一般以lib开头,形如libmymodule.so.1.0.0. 后面跟的三个版本号,从左到右的含义为: (1) 大版本号,当接口变得和之前不兼容,则新增一个大版本号. ...
- Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客
Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客 Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf (2009-07- ...
- 静态库与动态库(共享库)的联系与区别
提要: 1.静态库 静态库,也称作归档库(archive),按惯例它们的文件名都以.a结尾.比如,标准C语言函数库/usr/lib/libc.a和X11函数库/usr/ ...
- was设置共享库解决jar冲突
一.jar包冲突问题解决 1.问题描述: 引入新外围项目的jar后,在本地tomcat运行正常,但是在was服务器调用httpclient.jar中方法提示异常(该异常为系统异常,Java代码的try ...
- Android .so 共享库(动态链接库)
转载自:http://blog.csdn.net/bat603/article/details/1438408 烟雨楼 http://hi.baidu.com/yanyulou c2]$ ar -r ...
- linux建立动态库链接,Linux动态链接库.so文件的创建与使用
资料出处:http://linux.chinaitlab.com/administer/803560.html 编 写维护文件的目的,在于方便程序员维护程序,尤其是维护比较大的工程项目.一个素质良好的 ...
- 【四、静态库与动态库(共享库)】揭开链接库的神秘面纱:手把手教你制作静态链接库与动态链接库
前言 不管是在 Windows 下开发,还是在 Linux 下开发,我们都会经常性的使用一些库文件,这些库文件的特点就是,我们可以看到接口的原型并通过这些接口来调用这个函数的功能,但是我们无法查看这个 ...
- linux 生成和使用动态链接库和静态链接库的Makefile编写
引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...
- Linux C++ libdl.so dlfcn.h使用方法(dlopen()、dlsym()、dlclose()、dlerror())(用于动态链接库操作)(懒加载、立即加载)共享库符号、动态库
文章目录 dlfcn.h解析 - dlopen():打开一个动态链接库文件并返回一个句柄,该句柄用于后续的操作,如查找符号.关闭库等. - dlsym():在打开的动态链接库中查找指定的符号,并返回符 ...
最新文章
- k8s实战之数据卷(volume)
- 【Python】精选30张炫酷的动态交互式图表,Pandas一键生成,通俗易懂
- iOS五种本地缓存数据方式
- 非科班通过几个月的培训入行人工智能现实吗?
- 零c语言txt下载,C语言问题c-0是什么意思
- Windows Nano Server安装配置详解03:远程管理Nano Server
- linux和python的关系_Python、Linux与我的缘分
- python3.7.2安装与配置_python3.7.0 安装与配置
- java因子的计算方法是_JAVA分解质因子
- 二维数组各行求和_数组入门 | 数组的维度和尺寸
- 2021江苏淮安高考成绩查询,2021江苏公务员考试成绩查询入口(淮安)
- 汉生机器人_2019高工机器人核心零部件会议
- ppt 2016 html,2016第1章HTML5.ppt
- 标准c++读写ini文件类
- Firemonkey Control的TabStop处理
- vue 点击按钮改变颜色
- 最全常见Web安全漏洞总结及推荐解决方案
- 高等数学期末总复习 DAY6.洛必达求极限、不等式单调性证明、判断拐点、曲率以及曲率半径
- 怎么可以快速解决网络劫持
- win11壁纸怎么可以动 Windows11秒变动态壁纸的设置方法