2

私は共有ライブラリを構築しており、ソース ツリーは次のように構成されています。

Makefile.am
src/
    Makefile.am
    srcfile1.h
    srcfile1.cpp
    ...
thirdpaty/
    Makefile.am
    lib1/
        Makefile.am
        lib1.h
        lib1.cpp
        ...
    lib2/
        ...

サードパーティのライブラリの一部は独自の Automake ファイルとともに配布されているため、再帰的な Automake を使用しています。src/Makefile.am通常の libtool マクロが含まれています。

lib_LTLIBRARIES = libmylib.la 
libmylib_la_SOURCES = scrfile1.h srcfile1.cpp ...

メイン ライブラリをサード パーティのライブラリにリンクするにはどうすればよいですか? Autotoolsのマニュアルを読むと、サードパーティのライブラリは libtool の便利なライブラリとしてビルドする必要があると思われるので、thirdparty/lib1/Makefile.am.

noinst_LTLIBRARIES  = libthirdpaty1.la
libthirdpaty1_la_SOURCES = lib1.cpp lib1.h

に以下を追加しますsrc/Makefile.am

libmylib_la_LIBADD = $(top_buildir)/thirdparty/lib1/libthirdpaty1.la

私のルート Makefile.am は INCLUDES マクロを保持しています:

INCLUDES = -I$(top_builddir)/thirdparty

しかし、この構成でビルドすると、未定義のシンボル エラーが発生します。

このソース コードを構成し、すべてのライブラリをリンクする正しい方法は何ですか?

4

1 に答える 1

0

ソース レイアウトと libtool の使用法は問題ないことがわかりましたが、ルートの Makefile.am には次のマクロがありました。

SUBDIRS = src thirdparty

あるべきだった

SUBDIRS = thirdparty src

のコードは のコードをsrc/参照しているためthirdparty/thirdparty/最初にコードをビルドする必要がありました。このSUBDIRSマクロにより、指定された順序で左から右にサブフォルダーが作成されます。

于 2013-08-25T22:21:24.423 に答える