在一个项目中,我正在构建一个C ++库和使用同一库的示例应用程序。该库应使用我在另一个项目中构建的另一个库,但是无法将所有这些链接在一起。我在Linux中使用自动工具和自动制作。
为了弄清楚问题,我设置了两个测试项目: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库。如果我构建test_use_lib而不从libwlib调用函数libtl :: hello,那么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
答案 0 :(得分:4)
您需要将libtl
链接到您的应用程序。请注意,libwlib
是静态库,因此无法链接任何内容。而是需要libwlib
的用户链接libwlib
依赖项。