编译小结(7)Automake编译静态库与动态库
来源:互联网 发布:单片机继电器器件代码 编辑:程序博客网 时间:2024/05/17 21:07
具体记录下,如何用Automake编译静态库(.a)与动态库(.so)的流程.步骤其实都是一样的,只有configure.in 与 Makefile.am 有区别。一。静态库(.a)configure.in :# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ([2.63])#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])AC_INIT(add.c)AM_INIT_AUTOMAKE(libcalc.la,1.0)#AC_INIT(libcalc.a,1.0,[])#AM_INIT_AUTOMAKEAC_CONFIG_SRCDIR([add.c])AC_CONFIG_HEADERS([config.h])# Checks for programs.AC_PROG_CCAC_PROG_RANLIBAC_PROG_LIBTOOL# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.#AC_CONFIG_FILES([Makefile])AC_OUTPUT(Makefile)编译静态库需要加上 AC_PROG_RANLIBMakefile.am:二。动态库(.so)#author: XCLAUTOMAKE_OPTIONS=foreign#noinst_LIBRARIES=libcalc.lalib_LTLIBRARIES = libcalc.lalibcalc_la_LDFLAGES = -fPIC -m64libcalc_la_SOURCES=add.c sub.c如果只想编译静态库,但不想安装到系统中,用noinst_LIBRARIES 代替lib_LTLIBRARIES .所以noinst的比较常见。configure.in :# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ([2.63])#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])#AC_INIT(add.c)#AM_INIT_AUTOMAKE(libcalc.so,1.0,xcl_168@aliyun.com)AC_INIT(calc,1.0,xcl_168@aliyun.com)AM_INIT_AUTOMAKEAC_CONFIG_SRCDIR([add.c])AC_CONFIG_HEADERS([config.h])# Checks for programs.AC_PROG_CCAC_PROG_LIBTOOL# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT(Makefile)Makefile.am:#author: XCLAUTOMAKE_OPTIONS=foreignlib_LTLIBRARIES = libcalc.lalibcalc_la_SOURCES=add.c sub.clibcalc_la_LDFLAGES = -fPIC -m64
如果是C++动态库则要用extern "C"将要导出的函数包起来的。
再配合 --retain-symbols-file 与 --version-script 两个参数来实现Windows动态库的def文件功能。
例:
#if !defined(WIN32)extern "C" //不加这个会乱码{ MyINST * CreateInstance(); void DestoryInstance( MyINST * pInstance);//__attribute__ ((visibility("default"))) MyINST * CreateInstance ()//__attribute__ ((visibility("default"))) void DestoryInstance ( MyINST * pInstance)}#endif
测试环境及测试代码在 编译小结(3) 动态库(.so)编译及二种调用技巧 中
另可以看看gcc与手写Makefile编译的写法:
编译小结(4) 说说静态库(.a)
编译小结(5) Makefile项目实用例子
MAIL: xcl_168@aliyun.com
BLOG: http://blog.csdn.net/xcl168
0 0
- 编译小结(7)Automake编译静态库与动态库
- gcc编译动态库与静态库
- 静态编译与动态编译
- 静态编译与动态编译
- 静态编译与动态编译
- 动态编译与静态编译
- 静态编译与动态编译
- 静态编译,动态编译,静态链接库,动态链接库
- 静态库 动态库 编译
- 编译小结(6)认识Automake
- linux动态库与静态库的编译与加载
- linux动态库与静态库的编译与加载
- 编译小结(4) 说说静态库(.a)
- linux操作系统下编译静态库与动态库
- linux 静态库与动态库的编译和使用
- linux编译生成动态链接库与静态链接库
- 静态库/动态库的 生成与编译链接
- Mac下libconv动态库与静态库的编译
- 硒8
- 硒9
- 硒10
- 硒11
- 如何从零基础学习计算机编程
- 编译小结(7)Automake编译静态库与动态库
- 2013、12、28、、、右键弹出设置背景颜色
- 2013年12月20日-27日(平均每天5小时,共40小时,剩4782小时)
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- 笔记--监听器
- android2D游戏编程总结
- OCP-1Z0-新051-61题版本-1
- 这个是看别人改的代码。但是有错误,,,找不到方法来改正错误。。。。今天编了一天的代码,脑细胞都要死完了。真心觉得计算机的工作不好做的啊,好好加油啊。。我的代码啊,不懂了!下面的有错误啊。
- OCP-1Z0-新051-61题版本-2