1

Autotools (Automake/Libtool) からライブラリを構築しようとしています

私のディレクトリ構造は次のとおりです。

src/MyLib/*some_sources*.cpp/.h + a Makefile.am
src/MyLib/Parsers/*some_other_sources.cpp/.h Makefile.am

すべてのソース ファイルを同じディレクトリに配置すると (つまり、「パーサー」サブディレクトリはありません)、すべて正常に動作します。(コンパイル後、他のプログラムからのリンク)

しかし、「理想的な構造」(ベース ソース フォルダー + 「パーサー」サブディレクトリ) を試すと、ライブラリを使用してプログラムをコンパイルしようとすると、リンケージ エラーが発生します。

<< usr/local/lib/mylib.so: undefined reference to <a function from "/Parsers" subdir > >>

Libtool は、コンパイル中に私のサブディレクトリ「パーサー」を静的にリンクしていないようです (おそらく、外部共有ライブラリと見なされますか?)

これが私のベース「Makefile.am」です:

lib_LTLIBRARIES = mylib.la
SUBDIRS = Parsers .
mylib_la_SOURCES = <base_dir_source_files>

そして、パーサーのサブディレクトリにある私の「Makefile.am」:

mylib_la_SOURCES = <parsers_dir_source_files>

もちろん、「パーサー」サブディレクトリを作成した後、すべてをlibtoolize-dし、autoreconf-edしました。

よろしくお願いいたします。

4

1 に答える 1

2

この場合の最も簡単な方法は、Makefile.amファイルを Parsers ディレクトリに追加しないことです。代わりに、ソース ファイル名のMyLib/Makefile.am前に$(srcdir)/Parsers/(変数を付けたほうがよい) を追加します。

このようなもの:

src/
|
\--MyLib/
   |
   |--Makefile.am
   |--base.cpp
   |--base.h
   \--Parsers/
      |
      |--parser.cpp
      \--parser.h

そして src/MyLib/Makefile.am で:

PARSERS=$(srcdir)/Parsers
foo_SOURCES: base.cpp base.h \
    $(PARSERS)/parse.cpp $(PARSERS)/parse.h
于 2012-09-20T19:30:05.097 に答える