automake java_一步步实现windows版ijkplayer系列文章之五——使用automake生成makefile

本文介绍了如何在Windows上使用automake为ijkplayer的ijkplayer和ijksdl库生成makefile。通过一步步操作,包括设置mingw环境、处理configure.in文件错误、执行aclocal、autoconf、automake等命令,最终成功编译并生成可执行文件。
摘要由CSDN通过智能技术生成

#一步步实现windows版ijkplayer系列文章之五——使用automake一步步生成makefile

上一篇文章我们把ffmpeg库成功在windows平台下编译成dll了,ffmpeg的编译方案是跨平台的,直接使用它的现成的configure文件用于生成makefile,但是ijkplayer的另外两个库ijkplayer和ijksdl只支持android和IOS平台,因此在windows平台的编译需要自己实现,我们打算使用automake,先熟悉一下,从网络搜罗了两个例子,在自己的环境里面一步步成功生成了makefile,其中有些坑,现在将这些步骤记录下来。

准备环境

平台 windows mingw

autoconf 版本:2.68

automake版本:1.11.1

一个简单例子

创建文件夹hello,进入文件夹后编辑一个简单的hello.c文件

#include

int main(int argc, char** argv)

{

printf("Hello, automake!\n");

return 0;

}

手动创建Makefile.am,內容如下:

AUTOMAKE_OPTIONS= foreign

bin_PROGRAMS= hello

hello_SOURCES= hello.c

执行autoscan,目录变化如下:

$ ls -l

total 2

drwxr-xr-x 2 zexu Administrators 0 Oct 20 12:14 autom4te.cache

-rw-r--r-- 1 zexu Administrators 0 Oct 20 12:14 autoscan-2.68.log

-rw-r--r-- 1 zexu Administrators 495 Oct 20 12:14 configure.scan

-rw-r--r-- 1 zexu Administrators 100 Oct 18 07:46 hello.c

看一下configure.scan的内容:

# -*- Autoconf -*-

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

AC_PREREQ([2.68])

AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])

AC_CONFIG_SRCDIR([hello.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])

AC_OUTPUT

将此文件重命名为configure.in,执行autolocal,autoconf,生成configure:

$ ls -lh

total 111K

drwxr-xr-x 2 zexu Administrators 0 Oct 20 12:29 autom4te.cache

-rw-r--r-- 1 zexu Administrators 0 Oct 20 12:14 autoscan-2.68.log

-rwxr-xr-x 1 zexu Administrators 109K Oct 20 12:29 configure

-rw-r--r-- 1 zexu Administrators 495 Oct 20 12:14 configure.in

-rw-r--r-- 1 zexu Administrators 100 Oct 18 07:46 hello.c

执行如下automake命令:

$ automake --add-missing

configure.in: no proper invocation of AM_INIT_AUTOMAKE was found.

configure.in: You should verify that configure.in invokes AM_INIT_AUTOMAKE,

configure.in: that aclocal.m4 is present in the top-level directory,

configure.in: and that aclocal.m4 was recently regenerated (using aclocal).

configure.in:7: required file `config.h.in' not found

Makefile.am: installing `./depcomp'

/mingw/share/automake-1.11/am/depend2.am: am__fastdepCC does not appear in AM_CONDITIONAL

/mingw/share/automake-1.11/am/depend2.am: The usual way to define `am__fastdepCC' is to add `AC_PROG_CC'

/mingw/share/automake-1.11/am/depend2.am: to `configure.in' and run `aclocal' and `autoconf' again.

/mingw/share/automake-1.11/am/depend2.am: AMDEP does not appear in AM_CONDITIONAL

/mingw/share/automake-1.11/am/depend2.am: The usual way to define `AMDEP' is to add one of the compiler tests

/mingw/share/automake-1.11/am/depend2.am: AC_PROG_CC, AC_PROG_CXX, AC_PROG_CXX, AC_PROG_OBJC,

/mingw/share/automake-1.11/am/depend2.am: AM_PROG_AS, AM_PROG_GCJ, AM_PROG_UPC

/mingw/share/automake-1.11/am/depend2.am: to `configure.in' and run `aclocal' and `autoconf' again.

看到出错了,在configure.in中添加如下信息:

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

再次执行aclocal,autoconf和automake

zexu@DESKTOP-R4T030U ~/devel/hello

$ aclocal

zexu@DESKTOP-R4T030U ~/devel/hello

$ autoconf

$ automake --add-missing

configure.in:9: installing `./install-sh'

configure.in:9: installing `./missing'

configure.in:7: required file `config.h.in' not found

执行autoheader,生成头文件后再次automake,最后成功,可见没有任何无误提示。

zexu@DESKTOP-R4T030U ~/devel/hello

$ automake --add-missing

最后执行configure,生成Makefile文件:

zexu@DESKTOP-R4T030U ~/devel/hello

$ ./configure

执行make,生成hello.exe:

zexu@DESKTOP-R4T030U ~/devel/hello

$ make

make all-am

make[1]: Entering directory `/home/zexu/devel/hello'

gcc -DHAVE_CONFIG_H -I. -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello.o hello.c

mv -f .deps/hello.Tpo .deps/hello.Po

gcc -g -O2 -o hello.exe hello.o

make[1]: Leaving directory `/home/zexu/devel/hello'

zexu@DESKTOP-R4T030U ~/devel/hello

$ ls

Makefile aclocal.m4 config.h config.status depcomp hello.o stamp-h1

Makefile.am autom4te.cache config.h.in configure hello.c install-sh

Makefile.in autoscan-2.68.log config.log configure.in hello.exe missing

一个复杂一些的例子

这个例子使用了libtool,我把代码提交到了github,先把其clone下来:

git clone https://github.com/harlanc/automake_examples.git

进入example_2,先看一下目录结构:

$ ls -R

.:

Makefile.am configure.in error.c error.h lib main.c replace

./lib:

Makefile.am source.c source.h

./replace:

Makefile.am basename.c dummy.c

执行下面的命令:

zexu@DESKTOP-R4T030U ~/automake_examples/example_2

$ aclocal

zexu@DESKTOP-R4T030U ~/automake_examples/example_2

$ autoheader

zexu@DESKTOP-R4T030U ~/automake_examples/example_2

$ automake --add-missing --copy

configure.in:11: installing `./config.guess'

configure.in:11: installing `./config.sub'

configure.in:8: installing `./install-sh'

configure.in:11: required file `./ltmain.sh' not found

configure.in:8: installing `./missing'

lib/Makefile.am: installing `./depcomp'

看到有一个错误,执行下面的语句:

$libtoolize --automake --copy --debug --force

在此执行automake:

$ automake --add-missing --copy

最后成功,执行autoconf和configure:

zexu@DESKTOP-R4T030U ~/automake_examples/example_2

$ autoconf

zexu@DESKTOP-R4T030U ~/automake_examples/example_2

$ ./configure

最后生成Makefile文件,执行make,生成可执行文件:

$ make

最后成功。

参考

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[一步步实现windows版ijkplayer系列文章之五——使用automake生成makefile]http://www.zyiz.net/tech/detail-118030.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值