如何链接libtool静态la库?

时间:2015-08-17 20:20:03

标签: c++ makefile libtool

我已成功编译this library。它生成一个libcds2.la文件,我试图链接到我自己的项目中。我将所有文件(包括.h文件)放在与我的项目文件相同的目录中。当我尝试链接并使用所述库的功能时,使用:

g++ -o test -I/opt/include/ -L/opt/lib/ -lcds2 libcdsNoptrs.cpp util.cpp

回来了

./test: error while loading shared libraries: libcds2.so.2: 
      cannot open shared object file: No such file or directory
无论那是什么。但重点是,大部分时间它都不能识别图书馆。我假设我对文件路径做错了什么,但无法弄明白。我的测试文件是一个包含#include "libcds2/array.h"的C ++文件,所有内容都安装在opt/libopt/include中,丑陋,我知道,但那是Makefile生成的内容。

任何指针?

1 个答案:

答案 0 :(得分:2)

libtool .la是一个'元数据'文件。在构建cds2库之后,预计libtool也将用于链接'模式来构建任何包的测试等。

通常,在您找到.la文件的目录中,您会在.a子目录下找到.so.libs。如果.libs/libcds2.a被赋予configure选项(或默认情况下已启用),则会在那里找到--enable-static文件。但是,我的理解是您已在/opt中安装了该软件包:

g++ -I/opt/include/ libcdsNoptrs.cpp util.cpp -o test /opt/lib/libcds2.a

否则,如果未安装libcds2,请提供以下路径:.../libcds2/lib/.libs/libcds2.a

除非你想在--link模式下使用libtool和-static来处理所有事情。但是学习libtool的优点通常是下雨天的练习:)