我正在尝试从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。
提前感谢您的帮助。
答案 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