Automakeで共有ライブラリ(ダイナミックリンクライブラリ)Makefileを作成する

23289 ワード

Automakeツールパッケージを使用して、クロスコンパイルされた共有ライブラリのMakefileを作成するには
ここで使用するautoconfは2.67バージョンで、debianの下で実現されています.
バージョンが低い場合は、apt-get install automakeで最新のバージョンをインストールしたり、libtoolが必要になったり、apt-get installでインストールしたりすることができます.
ここでは、簡単な関数ライブラリを作成して説明します.
ディレクトリrx、およびソースディレクトリsrcを作成する:

  
    
$ mkdir rx
$ mkdir rx / src

rx/srcでrx.c,rx.hの2つのソースファイルを編集します.

  
    
mybdebian: / home / myb / php / rx / src # cat 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ファイルで、ソースコードが格納されているサブディレクトリが含まれている限り、内容は以下の通りです.

  
    
AUTOMAKE_OPTIONS = foreign
SUBDIRS
= src

rx/srcディレクトリの下にあるMakefile.amの内容は次のとおりです.

  
    
AUTOMAKE_OPTIONS = foreign
lib_LTLIBRARIES
= librx.la
librx_la_SOURCES
= rx.c
include_HEADERS=rx.h

そのうちlib_LTLIBRARIES=の後の「librx.la」は生成するライブラリファイル名で、.laと書く必要があります..soではなく、実際にlibrx.soファイルが生成されます.
次のlibrx_Laはlibrx.laが「.」を下線「」に変換した後に「_SOURCES=」を付け、等号以降はソースファイル名で、1つ以上の場合はスペースで区切ります.
include_HEADERS=後のヘッダファイルは、他のプログラムに含めるために使用され、make install時にインストールディレクトリのincludeディレクトリにコピーされます.
上位ディレクトリに戻り、autoscanを使用してソースディレクトリをスキャンします.

  
    
$autoscan
$ls
autoscan.log configure.scan Makefile.am src

configure.scanをconfigure.acに改名する

  
    
$mv configure.scan configure.ac

  
    
AC_OUTPUT([Makefile
src
/ Makefile])

このファイルをコンパイルするには:

  
    
$ vim configure . ac

  
    
# -*- Autoconf -*-
#
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レポートのメールアドレスを追加します.

  
    
AC_INIT(rx2dlib, 0.01 ,resound @ 163 .com)

次の文を追加します.

  
    
AM_INIT_AUTOMAKE

この言葉は必須です.
このスクリプトは共有ライブラリを生成するために使用されるので、AC_を追加します.PROG_LIBTOOL AC_PROG_CCの次の行:

  
    
# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL

後のAC_を修正CONFIG_FILES文、AC_に変更OUTPUT、そして後ろのAC_をOUTPUT取外し:

  
    
AC_OUTPUT([Makefile
src
/ Makefile])

これでconfigure.acが作成され、修正された内容は以下の通りです.

  
    
# -*- Autoconf -*-
#
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])

次に、次の手順に従います.

  
    
$ aclocal
$ 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/armrx 2 dディレクトリにインストールすると仮定します.次のように構成できます.

  
    
$./ configure --host = arm-none-linux-gnueabi --prefix =/ usr / local / armrx2d

$make



Makeが完了すると、srcディレクトリの下にある非表示ディレクトリ.libsディレクトリに生成されたライブラリファイルが表示されます.

  
    
mybdebian: / home / myb / php / rx / src /. libs # ls -l
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/armrx 2 d/libディレクトリの下に自動的にインストールできます.
Automakeを使用すると、次のエラーメッセージが表示されます.
required file `./ltmain.sh' not found
libtoolが構成されていないためです.
解決策:
$libtoolize --automake --debug --copy –force
または、
$libtoolize --automake