ANE用のDLLをLinuxのautotoolsをつかって作成する手順です。
以前、途中までを記述しましたが、やっと一通りの流れが、
./configure; make;
だけで終了するようにすることができました。

まず、はじめにLinuxの前提ですが、
なぜか64bit版ではSeg faultを起こしてしまうので、32bit版のほうがいいみたいです。

でまず、準備から

環境の前提
$uname -m -r
2.6.31.12-174.2.3.fc12.i686.PAE i686

$automake --version
automake (GNU automake) 1.11.1

$autoconf --version
autoconf (GNU Autoconf) 2.63

というのが私の環境です。

MinGW32のインストール
$yum install mingw32-¥*

で終了です。

ソース環境の構築

ここでは、プログラムの説明はしません。
従って、hello.cは自分で用意してください。
また、ANE用のFlashRuntimeExtensions.(lib,h)は、以下のようの配置してある前提とします。

├── lib
│   └── win32
│       └── FlashRuntimeExtensions.lib
└── src
    ├── FlashRuntimeExtensions.h
    └── hello.c
Makefile.amの作成

下記のようにMakefile.amを2つ用意します。

Makefile.am

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src

src/Makefile.am

lib_LTLIBRARIES = libhello.la
libhello_la_LDFLAGS = -no-undefined \
        -avoid-version \
        -Wl,-o,.libs/hello.dll \
        -Wl,../lib/win32/FlashRuntimeExtensions.lib \
        -Wl,--output-def,.libs/hello.def,--out-implib,.libs/hello.dll.a
libhello_la_SOURCES = hello.c

ここで、作成するdllはhello.dllであると指定しています。
また、ここでは使いませんが、何かの役に立つかもしれないので、
hello.defとhello.dll.aも同時に作成するよう指定しています。
(多分、最終的なANE用のDLLを作成する場合には必要ないと思いますが・・・)

これでフォルダは以下のようになったはずです。

├── Makefile.am
├── lib
│   └── win32
│       └── FlashRuntimeExtensions.lib
└── src
    ├── FlashRuntimeExtensions.h
    ├── Makefile.am
    └── hello.c
./configure; make; で構築できるようにする
$autoscan
$mv configure.scan configure.ac

と実行したら、以下のようにconfigure.acを書き換えます。
私が追加したのは
AC_INIT
AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR
AC_PROG_RANLIB
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
意外は追加していません。
この辺りは、autoconfのバージョンによって多少違うようですが、
トラブルは避けたいので、自分の環境でautoscanした結果を編集した方がよいようです。

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.63])
AC_INIT([hello], [0.1], [coltware@gmail.com])
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_SRCDIR([src/FlashRuntimeExtensions.h])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
# Checks for programs.
AC_PROG_CC
AC_PROG_RANLIB
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([stdint.h string.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_INT32_T
AC_TYPE_UINT32_T
AC_TYPE_UINT8_T
# Checks for library functions.
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT

そして、次のようにコマンドを実行していきます。

$mkdir m4
$libtoolize
$aclocal -I m4
$autoheader
$automake -a -c
$autoconf

で一応の環境の構築は終了です。

DLLの構築

以下のようなconfigureを実行するスクリプトを作成します。

export MINGW=/usr/bin/i686-pc-mingw32
export CC=$MINGW-gcc
export AR=$MINGW-ar
export LD=$MINGW-ld
export AS=$MINGW-as
export NM=$MINGW-nm
export RANLIB=$MINGW-ranlib
export STRIP=$MINGW-strip
export DLLTOOL=$MINGW-dlltool
export WINDRES=$MINGW-windres
./configure \
        --target=i686-mingw32-pc \
        --host=i686-linux-gnu \
        archive_cmds_need_lc=no

ここでかなりはまったのが、最後のarchive_cmds_need_lc=noの部分です。
これがないと、libtoolで-lcを加えてしまいエラーになってしまいました。
毎回、これを手でうつのは面倒なのスクリプトにします。

$./make

これで終了です。
作成されると、
src/.lib/hello.dll
に作成されます。
あとはこれをほかの環境に移動して、ANEファイルを作成してください。

たかだか、hello.cのためだけにここまでするのは大げさですが、
ここから、ほかのライブラリが必要になった場合とか、ソースが多くなってきた場合とかに
autotoolsを使うと結構便利です。

ちょっと、変更すればほかの環境用にもできるはずです。
(まだ、自分ではやっていませんが・・・)

関連記事

Leave a Reply

Spam protection by WP Captcha-Free

ソフトウェア&ライブラリ



ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2012年2月
« 1月   3月 »
 12345
6789101112
13141516171819
20212223242526
272829  

カスタム検索
RSS
Add to Google
カテゴリ
にほんブログ村 IT技術ブログへ