一个pkglib库可以依赖另一个pkglib库吗?

时间:2020-04-30 22:08:30

标签: automake libtool

我有一个程序和两个库; program取决于lib1,而lib1取决于lib2。后者是Debian标记为“私有”库的意思,因此它们列在pkglib_LTLIBRARIES下。

program的{​​{1}}:

Makefile.am

bin_PROGRAMS = program program_SOURCES = program.c program_LDADD = ../lib1/lib1.la 的{​​{1}}:

lib1

Makefile.am的{​​{1}}:

pkglib_LTLIBRARIES = lib1.la
lib1_la_SOURCES = lib1.c
lib1_la_LIBADD = ../lib2/lib2.la

lib2

Makefile.am

pkglib_LTLIBRARIES = lib2.la lib2_la_SOURCES = lib2.c

program.c

int lib1_function(void); int main(int argc, char **argv) { return lib1_function(); }

lib1.c

这有效:

int lib2_function(void);

int lib1_function(void)
{
    return lib2_function();
}

尽管我在安装过程中确实收到了一个值得注意的警告(这可能与我的实际问题有关,也可能与我的实际问题无关),但我不知道它的含义是什么:

lib2.c

如果之后我在int lib2_function(void) { return 0; } $ autoreconf -i $ ./configure $ make $ sudo make install 中重命名libtool: warning: relinking 'lib1.la' ,则会发生这种情况:

lib2_function()

可以通过在重新编译之前进行卸载来修复它,但是我显然做错了。似乎是在链接lib1.c而不是新编译的库版本。

为什么?

我还可以通过更改来修复它(错误和警告)

lib2.c

进入

$ make
(...)
libtool: link: gcc -g -O2 -o .libs/program program.o  ../lib1/.libs/lib1.so -Wl,-rpath -Wl,/usr/local/lib/testprogram
../lib1/.libs/lib1.so: undefined reference to `lib2_function2'
collect2: error: ld returned 1 exit status

我知道为什么(/usr/local/lib/testprogram/lib2*被合并到pkglib_LTLIBRARIES = lib2.la 中,因此省去了开支),但是我不明白当noinst_LTLIBRARIES = lib2.la 是{ {1}}库。

我将sandbox留在了保管箱中。

0 个答案:

没有答案