作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 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>
还有我在 Parsers 子目录中的“Makefile.am”:
mylib_la_SOURCES = <parsers_dir_source_files>
当然,在创建“Parser”子目录后,我 libtoolize-d,autoreconf-ed 所有东西。
预先感谢您的帮助。
最佳答案
在您的情况下,最简单的事情就是不要将 Makefile.am
文件添加到 Parsers 目录。相反,将源文件名添加到以 $(srcdir)/Parsers/
为前缀的 MyLib/Makefile.am
(最好使用变量)。
像这样:
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
关于c++ - Autotools & Libtool - 如何从多个源目录编译共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518307/
我是一名优秀的程序员,十分优秀!