我如何 link 对抗 libtool static la 库?

How do I link against libtool static la library?

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

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 生成的内容。

有什么指点吗?

libtool .la 是一个 'meta data' 文件。构建 cds2 库后,预计 libtool 也将在 'link' 模式下用于构建包的任何测试等

通常,在您找到 .la 文件的目录中,您会在 .libs 子目录下找到 .a.so.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的优点通常是未雨绸缪:)