【问题标题】:Impossible to install shared library with .so file无法使用 .so 文件安装共享库
【发布时间】:2017-06-04 03:14:37
【问题描述】:

我无法在 Ubuntu 上安装 this library,或者至少无法编译将库链接到它的 .cpp。我已经完成了所有 Google 和 StackOverflow 的答案。

好吧,首先我运行cmake,然后运行make(当然还有make install)。不过,如果我运行g++ xxx.cpp -lcrb -o test,我会收到此错误:fatal error: CRNB.h: No such file or directory。该库还不想安装,所以我将libcrn.so 文件复制到/usr/lib 并运行sudo ldconfig 来加载它。现在...

  • sudo ldconfig -n -v /usr/lib/ 表示已正确安装(不是在复制 .so 文件之前)。
  • g++ -lcrn 表示它已正确安装,因为返回 undefined reference to 'main' 而不是 cannot find -lcrn(与复制 .so 文件之前一样)
  • ldd /bin/ls 没有列出该库,这意味着它没有安装

无论如何,尝试编译仍然会引发相同的错误。我也试过...

  • ... 创建.conf 文件并将其添加到文件夹/etc/ld.so.conf.d/
  • ... 创建.so 文件到/usr/lib 的符号链接
  • ...在/usr/local/lib/lib 文件夹中重复所有这些解决方案
  • ... 将所有这些文件夹添加到 /etc/ld.so.conf 路径
  • ...导出LD_LIBRARY_PATH.so文件的路径

还有更多类似的。正如你所看到的,所有这些都是一样的,所以很明显我正在失去一些重要的东西。有谁知道它可能是什么?

非常感谢!

【问题讨论】:

  • fatal error: CRNB.h: No such file or directory 表示找不到头文件 CRNB.h。在您的尝试中,您从未尝试对此文件执行任何操作。实际上,在cmake - make - make install 之后,库已安装,但它本地安装在install_3.9.5 子目录下。因此,您可以使用该库,但需要提供适当的额外包含目录(gcc-I 标志)和链接目录(-L 标志)。

标签: ubuntu cmake include shared-libraries .so


【解决方案1】:

您需要用“-I”标志指定包含目录,或将其导入您的系统。

试试:

g++ src_name.cpp -L./your/library -lcrn -I./your/headers -o out_name -std=c++11

或者:

如果不存在,您可以从 libcrn 包含文件 ("*.h") 复制到 "/usr/local/include/" 和库到 "/usr/local/lib/",然后:

g++ src_name.cpp -lcrn -o out_name -std=c++11

【讨论】:

  • 我忘记将包含文件复制到 /usr/local/include。通过这种方式,它可以与您的最后一个命令一起使用。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 2019-02-03
  • 1970-01-01
相关资源
最近更新 更多