我已经成功编译了 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 生成的内容。

任何指针?

最佳答案

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的优点通常是雨天的练习:)

关于c++ - 如何链接 libtool 静态库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32059026/

10-11 16:51