c++ - 将应用程序与一个库(包括另一个库)链接起来

标签 c++ autotools automake linkage

在一个项目中,我正在构建一个 C++ 库和一个使用相同库的示例应用程序。该库应该使用我在另一个项目中构建的另一个库,但我无法将所有这些链接在一起。我在 Linux 中使用 autotools 和 automake。

为了解决问题,我设置了两个测试项目:test_lib 和 test_use_lib。 test_use_lib 包含示例应用程序和库 libwlib。库 libwlib 然后使用 test_lib 中名为 libtl 的库。

我已将 test_lib 中内置的 libtl.a 文件及其 .h 文件复制到 test_use_lib 中,然后尝试从 libwlib 调用 libtl 中的函数 libtl::hello。

如果我在没有示例应用程序的情况下构建 test_use_lib,那么将构建库 wlib.a。如果我在不从 libwlib 调用函数 libtl::hello 的情况下构建 test_use_lib,那么 libwlib 和示例应用程序都将构建。如果我尝试构建示例应用程序并从 libwlib 调用 libtl::hello,构建将失败。它失败了:

libtool: link: g++ -g -O2 -std=c++11 -pthread -Wall -Wextra -Werror -Wredundant-decls -Wcast-align -Wmissing-declarations -Wmissing-include-dirs -Winvalid-pch -Wredundant-decls -Wformat=2 -Wmissing-format-attribute -Wformat-nonliteral -fvisibility=default -o example example.o  ../../wlib/src/libwlib.a -pthread
../../wlib/src/libwlib.a(wlib.o): In function wlib::hello()':
test_use_lib/wlib/src/wlib.cpp:6: undefined reference to libtl::hello() 

在示例应用程序的 Makefile 中,我使用 LDADD 来包含 libwlib,在 libwlib 的 Makefile 中,我使用 LIBADD 来包含 libtl。

我已经把我的两个测试项目放在了github上:test_lib和:test_use_lib如果有人想看一看。

我非常感谢对我做错了什么的建议。

/M

最佳答案

您需要将 libtl 链接到您的应用程序。请注意,libwlib 是一个静态库,因此无法将任何内容链接到它。相反,需要链接 libwlib 依赖项的是 libwlib 的用户。

关于c++ - 将应用程序与一个库(包括另一个库)链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51692702/

相关文章:

c++ - 使用 C++ 的编程原理和实践第 4 章练习,第 7 步

linux - './configure, make, make install' 项目叫什么?

c++ - automake 1.12 更改了 bison/yacc 输出名称,向后不兼容的更改?

makefile - 了解分配给 makefile 中宏的数据

linux - _SCRIPTS primary 中指定的 Shell 脚本未显示在 dist tarball 中

c++ - 如何从多个 vector 中找到不相同的元素?

c++ - boost json 解析器的 json 数组映射问题

autotools - Automake会忽略缺少的NEWS/AUTHORS/COPYING/etc。标准文件

c++ - 指向常数整数的整数指针

linux - 我的 lib_LTLIBRARIES 库链接,但 check_LTLIBRARIES 没有链接?