如何链接静态库工具libtool的la库?

3

我已经成功编译了这个库。它生成了一个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/lib, opt/include中,很丑陋,我知道,但这就是Makefile生成的。

有任何指针吗?


cds2жІЎжңүз”ҹжҲҗlibcds.aе’Ң/жҲ–libcds.soж–Ү件еҗ—пјҹ - Galik
1
错误名称为“libcds2.so.2”表明您的库搜索路径中存在指向此(不存在的?)库的“libcds2.so”符号链接。我建议您检查库是否正确安装。 - Roger Leigh
1个回答

2
libtool中的.la是一个“元数据”文件。在构建cds2库之后,通常会使用libtool以“链接”模式构建包的任何测试等。
通常,您可以在找到.la文件的目录中,在.libs子目录下找到.a.so文件。提供了--enable-static选项(或默认启用),则可以在那里找到.libs/libcds2.a文件。但是,我理解您已在/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的优势通常是在雨天进行的练习 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接