【问题标题】:How do I link against libtool static la library?如何链接 libtool 静态 la 库?
【发布时间】:2015-08-17 20:20:03
【问题描述】:

我已经成功编译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

不管那是什么。但关键是大多数时候它只是不识别图书馆。我假设我在文件路径上做错了,但无法弄清楚。我的测试文件是一个 C++ 文件,包括#include "libcds2/array.h",所有东西都安装在opt/libopt/include,丑陋,我知道,但这就是 Makefile 生成的。

有什么建议吗?

【问题讨论】:

  • cds2 没有生成libcds.a 和/或libcds.so 文件吗?
  • 错误名称为“libcds2.so.2”这一事实表明您的库搜索路径中有一个“libcds2.so”符号链接指向此(不存在?)库。我建议您检查该库是否安装正确。

标签: c++ makefile libtool


【解决方案1】:

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

通常,在您找到.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 的优势通常是未雨绸缪:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多