【问题标题】:Quick Rundown on C++ libraries?快速了解 C++ 库?
【发布时间】:2021-11-23 04:35:32
【问题描述】:

我正在尝试解决我在使用库 matplot++ 时遇到的问题。我需要有人教我如何在这里钓鱼而不是给我一条鱼,因为我正在努力用谷歌搜索正确的术语来解决我的问题。

我的文件夹结构如下

-music_vis  
|-libs  
 |-3rd party  
 |-matplot  
  |-matplot.h  
  |-other_folders_for_matplot
|-wavs  
|build.sh  
|main.cpp  
|thread_pool.hpp

build.sh 现在如下:
g++ -Wall -lmatplot -I /$(pwd)/libs -g -o music_vis_cpp ./music_vis_main.cpp -lstdc++fs -std=c++17 -pthread

除了本节中的某些内容外,此 shell 脚本中的所有内容都 100% 有效: -lmatplot -I /$(pwd)/libs

我收到以下错误:

/usr/bin/ld: cannot find -lmatplot 
collect2: error: ld returned 1 exit status

g++ 是否虚假地在我的 /usr/bin/ 中查找文件?它不应该在 $(pwd)/libs 中查找吗?

根据我的研究,我也应该有 .so 文件,但 matplot 文件夹下的所有内容都是 .cpp 或 .h 文件。这是否意味着我将库错误地安装到我的 /lib/ 文件夹中?我从 github 克隆并简单地复制到我的 /lib/ 文件夹中。如果没有 -lmatplot 标志,我会收到以下错误:

对于将来如何解决这些问题有任何想法、资源、指导或指导吗?谢谢朋友。

我按照 repo 上的说明进行操作,但是背负了 Compiler not finding jpeg and png libraries ,我在 cmake 中添加了以下标志。这为我创建了目标文件。

-DBUILD_SHARED_LIBS=ON

【问题讨论】:

  • echo $LD_LIBRARY_PATH,也看看 libbmatplot.so 存在哪里?
  • 仅供参考,stackoverflow 是针对特定问题的。这是一个非常好的问题,但不适合stackoverflow。希望无论如何你都能找到答案。
  • -I 用于在编译阶段包含头文件的目录,您希望-L 在链接期间添加查找库的位置。
  • 如果您的平台类似于 linux,-lmatplot 指示 gcc 查找 libmatplot.so 文件。这看起来确实是其中三个的一部分,因此可能需要对其进行编译。如果库有非标准位置,则需要L 密钥和-l 密钥。你还需要 `-I` 键,包括在内。您寻求的信息来源是有关您正在使用的编译器的文档,您几乎无法即兴演奏华尔兹。
  • 有时我们看不到我们应该去的地方... GCC 文档:gcc.gnu.org/onlinedocs 因为您的项目是 C++,所以在 isocpp 网站 isocpp.org/faq 上有相关链接

标签: c++ libraries


【解决方案1】:

我能够按照 matplot++ .md 文件中包含的构建说明构建一个 .so 文件,但提供了一个额外的标志 -DBUILD_SHARED_LIBS=ON

从那里,在 build 文件夹下,我在文件夹树的某处找到了一个 .so 文件,将其移至我的 /lib/ 目录,然后运行以下 shell 脚本:

#!/bin/bash
g++ -I /$(pwd)/libs -L /$(pwd)/libs -Wall -g -o music_vis_cpp ./music_vis_main.cpp -lstdc++fs  -std=c++17  -pthread   -lmatplot

这最终构建了我的程序。但是它没有运行,因为共享对象文件不存在或其他原因。

编辑:使程序运行的更多步骤; 在文件系统上创建一个文件夹,然后将 .so 文件放入其中,然后...

export LD_LIBRARY_PATH=/home/harrison/Documents/computer/cpp_packages/shared_object_lib/

我每次重新启动计算机时都需要运行这个导出行,所以我只需将它添加到我的构建脚本中。

所以 .so 文件位于两个位置,一个在构建时需要,另一个在运行时需要。使用这种方法,我的二进制文件可以在我的计算机上的任何位置运行。

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 2012-03-03
    • 2014-09-10
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2022-10-06
    相关资源
    最近更新 更多