1

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

我的目录结构是:

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

当我将所有源文件放在同一目录中时(因此,没有“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>

还有我在 Parsers subdir 中的“Makefile.am”:

mylib_la_SOURCES = <parsers_dir_source_files>

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

预先感谢您的帮助。

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 回答