博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

My sky

把自己角色扮演好,全力以赴每一秒
scutan.cublog.cn


如何在autotools中使用其它动态库的方法
自己写的如何在autotools中添加另外第三方提供的动态库的问题
 
1. 首先建立一个动态库
cd /usr/local/
mkdir test
cd test
vim hhh.c
如下:

hhh.c

void hello()
{
        printf("in hello\n");
}

然后使用如下命令来生成库

gcc -fPIC -c hhh.c -o libhhh.o
gcc -shared -W1 -o libhhh.so libhhh.o -lc

然后再将当前路径加入到库查找路径中去:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

现在就建立了一个动态库了.
接下来使用刚刚建立的这个动态库.

2. 使用autotools将该动态库加入到自己的工程中去
cd /home/scutan/auto
mkdir src

在src/目录中编辑test.c文件:
test.c

#include<stdio.h>
int main()
{
        printf("main\n");
        hello();
        return 0;
}

然后回到上一层目录cd ../
建立Makefile.am文件 (auto/Makefile.am)

bin_PROGRAMS=test
test_SOURCES=src/test.c
test_LDADD=/usr/local/test/libhhh.so

然后执行命令autoscan生成configure.scan
修改成如下所示:

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(test,1.1.1,[chinatan])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/test.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC


# Checks for libraries.
AC_CHECK_LIB([hhh], [main])
# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.


AC_OUTPUT([Makefile])

然后将该文件名改为configure.in

mv configure.scan configure.in

然后执行如下命令建立必要的文件

touch NEWS README AUTHORS ChangeLog

最后再执行

autoreconf -fvi

此时就可以使用./configure了.

./configure
make
make install

./test 执行就可看到效果.

然后再make dist打包..

发表于: 2008-01-11 ,修改于: 2008-05-05 20:39,已浏览220次,有评论1条 推荐 投诉


网友评论
内容:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
这个语句把当前路径加到动态库搜索路径中
可是在后面开发home/scutan/auto下test这个工程的时候,哪里体现了到***当前路径***下找libhhh.so这个动态库的呢
毕竟libhhh.so 所在路径和teste.c所在路径不一样啊
zhuhefang2006 评论于:2008-07-14 01:20:41 (58.33.42.★)

发表评论