Autotools& Libtool - 如何从多个源目录编译共享库?

时间:2012-09-20 18:05:51

标签: c++ autotools automake libtool linkage

我正在尝试从Autotools(Automake / Libtool)构建一个库

我的目录结构是:

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

当我将所有源文件放在同一目录中时(因此,没有“Parsers”子目录),一切正常。 (汇编,然后与其他计划联系)

但是当我尝试“理想结构”(基础源文件夹+“Parsers”子目录)时,当我尝试使用库编译程序时出现链接错误:

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

似乎Libtool在编译期间没有静态链接我的子目录“Parsers”(可能将其视为外部共享库?)

这是我的基础“Makefile.am”:

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

我的“Makefile.am”在Parsers的子目录中:

mylib_la_SOURCES = <parsers_dir_source_files>

当然,在创建“Parser”子目录后,我将libtoolize-d,autoreconf-ed all。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在您的情况下最简单的事情就是不要将Makefile.am文件添加到Parsers目录中。而是将源文件名添加到前缀为MyLib/Makefile.am的{​​{1}}(更好地使用变量)。

这样的事情:

$(srcdir)/Parsers/

在src / MyLib / Makefile.am中:

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