我在autotool
环境中。
我正在开发一个库A
,它使用库B
和C
作为依赖项。
B
构建libtool
,因此输出为libB.la
C
,输出为libC.a
A
,输出为libA.la
然后我构建了一个将这些库链接在一起的测试程序。
Makefile.am
在下面。
check_PROGRAMS = acc_test
AM_CPPFLAGS = -I$(top_srcdir)/include \
-I$(top_srcdir)/deps/C/include \
-I$(top_srcdir)/deps/B/include
LDADD = $(top_builddir)/src/libA.la \
$(top_builddir)/deps/B/src/libB.la \
$(top_builddir)/deps/C/libC.a
acc_test_SOURCES = test.cpp
当我运行acc_test
时,我遇到了
dyld:懒惰符号绑定失败:未找到符号:__ ZN7leveldb7OptionsC1Ev 参考自:/Users/somepath/build/src/.libs/libA.0.dylib 期望:平面命名空间
dyld:未找到符号:__ ZN7leveldb7OptionsC1Ev 参考自:/Users/somepath/cw/build/src/.libs/libA.0.dylib 期望:平面命名空间
这是我的主要问题。
在我尝试了很多东西后,我找到了。
C
内调用A
库的某些功能时崩溃了。如果我从A
代码中评论它们,它就不会崩溃。C
中明确地使用test.cpp
编写代码,则不会崩溃。 AM_LDFLAGS = -static
,则不会崩溃。 B
模拟相同的情况,它不会崩溃。我的问题在下面
-static
,还有其他方法可以解决此问题吗?我认为如果用户在想要使用我的库A
B
的许多实现都在标题中。它涉及吗?谢谢