首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++如何组织(管理)第三方库?

C++如何组织(管理)第三方库?
EN

Stack Overflow用户
提问于 2018-07-24 05:41:24
回答 2查看 1.4K关注 0票数 1

(我刚刚编辑了这个问题,以便更具体)

我知道这个问题可能过于笼统,无法回答,但我只是找不到这方面的好教程,所以试图在这里寻求帮助。

我对C++很陌生,以前我的主要编程语言是Java和Python。C++管理第三方库的方式有些混乱,因为me......While Python可以很容易地用pip安装东西,me......While可以导入JAR,C++是如何组织这些事情的?

我想把我的问题分成几部分:以下是我的一些理解和问题:

  1. 只要编译器或IDE知道库的路径,那么一切都很好。因此,当我们说install时,我们只需将lib的路径添加到某些系统路径。对于IDE,我们只需配置设置,以便它能够解析给定路径中的lib。如果有什么不对的地方就纠正我。
  2. 有些C++库都是源代码,而有些则包含某些内容。像.so.dll,那是什么?有什么区别吗?我看到一些lib说它可以与包含几个头一起使用,但也有一些需要静态链接,这意味着什么?
  3. 管理所有这些库的一般好方法是什么?(例如,在python中,pip将简单地安装到某个全局范围,或者我们使用vitrual来管理它。那么与C++中的pip类似的东西呢?
  4. 更具体地说,我使用的是CLion,Clion使用的是CMake,所以我想要做的就是正确地配置CMakeList.text,然后IDE将解析所有的库并正确编译?

再次为如此笼统和不透明的问题感到抱歉,但我完全迷失了作为C++的新手,这比我以前使用的Python和Java复杂得多……

任何好的教程可能会有很大的帮助,谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-07-24 05:50:19

C++不是,C++是一种语言,不是一个特定的编译器或实现。

尽管如此,对于大多数编译器来说,构建C++应用程序是分几个步骤完成的:

  1. 编辑
  2. 编译为目标文件
  3. 链接到可执行文件。

从技术上讲,C++编译器只涉及步骤2(实际上只是步骤2的一部分)。

很久以前,大多数编译器和链接器允许您将头文件和库文件放在任何地方,然后命令行上传递给编译器和链接器的标志告诉编译器和链接器在哪里找到文件。

对于头文件,(公共)命令行选项-I (大写i)用于添加要搜索的头文件的路径。对于库,选项-L类似地为库添加了链接器要搜索的路径。当然,编译器和链接器中也内置了默认路径,-I-L选项增加了这些缺省值。

然后,要链接到实际的库,链接器选项-l (小写L)是常用的选项。每个-l选项都列出了一个需要链接到可执行文件中的库。

关于CMake和CLion,CLion IDE根本不链接任何东西。相反,它使用CMake创建一组https://en.wikipedia.org/wiki/Makefile,其中包含用于构建目标的信息。

最后,除了PIP或其他语言包管理器之外,还有一些C和C++选项,但是通常您使用标准方法在系统上安装程序和库。

就像在Windows上一样,您可以找到一个安装程序,然后修改项目设置(使用CMake CMakeLists.txt、原始MakefileMakefile设置)来添加所需的目录。

对于Linux系统,您可以使用标准的包管理器(比如基于Debian的系统上的apt,或者基于Fedora的系统上的yum等等)。查找和安装库。然后,库及其头文件将安装在默认位置。您仍然需要设置构建环境才能真正链接到库。

票数 2
EN

Stack Overflow用户

发布于 2018-07-24 05:57:19

常见的方法是,您可以将第三方的内容作为.dll,也可以将其直接作为代码(例如boost .您必须加载它并使其工作,您只需包括您想要的部分,对于一些来自boost的部件,您必须使用编译器设置来构建它,并包括.dlls)

像你这样的经理想要的东西,我现在才从VisualStudio和NuGet。我不知道CLion是否有这样的事情。

作为示例,您可以查看opencv中的示例:

install.html

对于你的问题:

  1. 对,是这样。但是,如果库也必须匹配设置(32/64位,释放/调试)
  2. 如果您只需要包含一些标头,那么代码将直接包含到您的项目中,并与您的代码一起编译。如果您必须将其链接为二进制文件(.dll窗口、.so Unix (我想如果错误请更正),则编译代码,然后将编译后的函数链接到代码中。

以下是对.so的回答:What are .a and .so files?

这里是静态和动态库:When to use dynamic vs. static libraries

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51491200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档