gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:24:44 24 4
gpt4 key购买 nike

我正在尝试从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com