利巴德元';在ubuntu上不能将一个libtool库添加到另一个libtool库?

利巴德元';在ubuntu上不能将一个libtool库添加到另一个libtool库?,ubuntu,autotools,automake,libtool,Ubuntu,Autotools,Automake,Libtool,我有一个使用GNU autotools的项目,其中的Makefile.am部分如下所示: lib_LTLIBRARIES += myproj/mysupport/libmysupport.la myproj_mysupport_libmysupport_la_SOURCES = myproj/mysupport/some_sources.cc lib_LTLIBRARIES += myproj/myapp/libmyapp.la myproj_myapp_libmyapp_la_SOURCES

我有一个使用GNU autotools的项目,其中的
Makefile.am
部分如下所示:

lib_LTLIBRARIES += myproj/mysupport/libmysupport.la
myproj_mysupport_libmysupport_la_SOURCES = myproj/mysupport/some_sources.cc

lib_LTLIBRARIES += myproj/myapp/libmyapp.la
myproj_myapp_libmyapp_la_SOURCES = myproj/myapp/app_logic.cc
myproj_myapp_libmyapp_la_LIBADD = myproj/mysupport/libmysupport.la

sbin_PROGRAMS += myproj/myapp/myapp
myproj_myapp_myapp_SOURCES = myproj/myapp/main.cc
myproj_myapp_myapp_LDADD = myproj/myapp/libmyapp.la
在这里,我有一个支持(libtool)库、一个应用程序库和一个二进制文件。应用程序库包含二进制save
main
中的所有内容,这是二进制文件引入的唯一源代码

在我的mac电脑上,这个编译和链接很好,一切都很好。然而,在Ubuntu上,我得到了以下链接错误:

/bin/bash ./libtool --tag=CXX   --mode=link g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage --coverage -g -O0 -fprofile-arcs -ftest-coverage  -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib  -o myproj/myapp/myapp myproj/myapp/main.o myproj/myapp/libmyapp.la -lgcov -llog4cplus  -lboost_filesystem-mt -lboost_iostreams-mt -lboost_program_options-mt -lboost_system-mt -lboost_thread-mt -lboost_system-mt -pthread 
libtool: link: g++ -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage --coverage -g -O0 -fprofile-arcs -ftest-coverage -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -o myproj/myapp/.libs/myapp myproj/myapp/main.o -pthread  -L/usr/local/lib myproj/myapp/.libs/libmyapp.so -lgcov /usr/lib/liblog4cplus.so -lboost_filesystem-mt -lboost_iostreams-mt -lboost_program_options-mt -lboost_thread-mt -lboost_system-mt -pthread
/usr/bin/ld: myproj/myapp/main.o: undefined reference to symbol 'myproj::mysupport::Application::main(sauce::Modules&, int, char**)'
/usr/bin/ld: note: 'myproj::mysupport::Application::main(sauce::Modules&, int, char**)' is defined in DSO /home/user/code/local-myproj/debug/myproj/mysupport/.libs/libmysupport.so.0 so try adding it to the linker command line
/home/user/code/local-myproj/debug/myproj/mysupport/.libs/libmysupport.so.0: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
下面是在我的mac上运行的等效libtool命令:

/bin/sh ./libtool --tag=CXX   --mode=link g++-4.2 -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage --coverage -g -O0 -fprofile-arcs -ftest-coverage  -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -L/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib  -o myproj/myapp/myapp myproj/myapp/main.o myproj/myapp/libmyapp.la -lgcov -llog4cplus -L/usr/local/lib -lintl -R/usr/local/lib -Wl,-framework -Wl,CoreFoundation -lboost_filesystem-mt -lboost_iostreams-mt -lboost_program_options-mt -lboost_system-mt -lboost_thread-mt -lboost_system-mt
libtool: link: g++-4.2 -Wall -Wextra -Werror -ansi -fprofile-arcs -ftest-coverage --coverage -g -O0 -fprofile-arcs -ftest-coverage -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath -Wl,/usr/local/lib -o myproj/myapp/.libs/myapp myproj/myapp/main.o -Wl,-framework -Wl,CoreFoundation -Wl,-bind_at_load  -L/usr/local/lib myproj/myapp/.libs/libmyapp.dylib /home/user/code/myproj/debug/myproj/mysupport/.libs/libmysupport.dylib -lgcov -llog4cplus -lintl -lboost_filesystem-mt -lboost_iostreams-mt -lboost_program_options-mt -lboost_thread-mt -lboost_system-mt
一个关键的区别似乎是第二个变量的
libtool:
echo中出现了
/home/user/code/myproj/debug/myproj/mysupport/.libs/libmysupport.dylib
。事实上,如果我在literal ubuntu命令中插入等效参数,它将成功完成

缺少的参数对应于
Makefile.am
中的
LIBADD
行。那么,问题是:我做得对吗?如果是这样的话,为什么它在OSX上工作而不是在Ubuntu上

OS X上的一些相关版本:

$ autoconf --version
autoconf (GNU Autoconf) 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.
$ automake --version
automake (GNU automake) 1.12.2
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Tom Tromey <tromey@redhat.com>
       and Alexandre Duret-Lutz <adl@gnu.org>.
$ libtool -V
Apple Inc. version cctools-822
$ g++-4.2 --version
i686-apple-darwin11-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$autoconf--版本
autoconf(GNU autoconf)2.69
版权所有(C)2012免费软件基金会。
许可证GPLv3+/Autoconf:GNU GPL版本3或更高版本
, 
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。
由大卫·J·麦肯齐和阿基姆·德梅尔撰写。
$automake--版本
汽车制造商(GNU汽车制造商)1.12.2
版权所有(C)2012免费软件基金会。
许可证GPLv2+:GNU GPL版本2或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。
汤姆·特洛米写的
还有亚历山大·杜雷特·卢茨。
$libtool-V
苹果公司版本cctools-822
$g++-4.2--版本
i686-apple-darwin11-g++-4.2.1(GCC)4.2.1(apple Inc.build 5666)(dot 3)
版权所有(C)2007免费软件基金会。
这是自由软件;有关复制条件,请参见源。没有
担保甚至不是为了适销性或适合某一特定目的。
现在在Ubuntu上:

$ autoconf --version
autoconf (GNU Autoconf) 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.
$ automake --version
automake (GNU automake) 1.11.3
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Tom Tromey <tromey@redhat.com>
       and Alexandre Duret-Lutz <adl@gnu.org>.
$ libtool --version
libtool (GNU libtool) 2.4.2
Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996

Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$autoconf--版本
自动通信(GNU自动通信)2.68
版权所有(C)2010免费软件基金会。
许可证GPLv3+/Autoconf:GNU GPL版本3或更高版本
, 
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。
由大卫·J·麦肯齐和阿基姆·德梅尔撰写。
$automake--版本
汽车制造商(GNU汽车制造商)1.11.3
版权所有(C)2011免费软件基金会。
许可证GPLv2+:GNU GPL版本2或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。
汤姆·特洛米写的
还有亚历山大·杜雷特·卢茨。
$libtool—版本
libtool(GNU libtool)2.4.2
Gordon Matzigkeit撰写,1996年
版权所有(C)2011免费软件基金会。
这是自由软件;有关复制条件,请参见源。没有
担保甚至不是为了适销性或适合某一特定目的。
$g++--版本
g++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3
版权所有(C)2011免费软件基金会。
这是自由软件;有关复制条件,请参见源。没有
担保甚至不是为了适销性或适合某一特定目的。

您确实需要安装支持库吗?因为您可以尝试在
noinst\LTLIBRARIES
中声明它,看看它是否有效。

有效!不,我不需要安装支持库,假设我仍然可以在没有它们的情况下运行二进制文件。不过,我还是不明白:为什么我之前的方法不起作用?我想这是因为
noinst\uu
check\u
都是为了方便起见: