C++项目如何管理第三方库

浅浅的i
  • 11
背景

我是一个大三的学生,原来学习的是java后端开发,但因为某些原因转为C++后端开发。由于之前的背景是java开发,所以对java那一套比较熟悉,并且相关资源也非常丰富,所以遇到java开发的问题一般能够自己解决。但是切换到C++后,有一个问题一直困扰着我,网上也没有找到好的答案,希望有学C++的前辈可以稍微指点一下。

问题

在做项目的时候经常需要用到第三方的包或库,使用java时可以直接用maven管理,并且第三方的包还可以随源码一起发布,非常方便。那么在C++中怎么管理第三方库呢?我看到的例子都是把库和头文件安装在操作系统的某个绝对目录下/usr/local/lib/,然后在编译的时候引入,因此我有一下疑惑

  1. 如果放在一个绝对路径,假设我们发布源码,那么使用者编译时是否需要在相同的目录里安装相同的库呢,使用者又怎么知道有那些库需要提前准备
  2. 假设第三方库可以随源码一起发布,假设我在windows中开发,自然第三方库只能跑在当前环境,如果我将源码在linux环境下编译,不就会出问题吗?难道需要把第三方源码也随源码发布一起编译,或者编译生成多个平台下的库,编译时根据环境选择

这些问题不涉及到具体的技术,希望有前辈可以指点一番,十分感谢

回复
阅读 2.2k
1 个回答
✓ 已被采纳
如果放在一个绝对路径,假设我们发布源码,那么使用者编译时是否需要在相同的目录里安装相同的库呢

一般都是利用 linux 的包管理器装(apt, yum ...)。不能的,自己从源码装也可以。

包管理器装的大部分都可以直接找到,源码装的也有一部分可以找到。

然后,就是编译的时候通常可以通过各种方式指定依赖包的路径。

使用者又怎么知道有那些库需要提前准备

写 Readme 或者 BUILD 里。使用者看了自己解决依赖问题。

假设第三方库可以随源码一起发布,假设我在windows中开发,自然第三方库只能跑在当前环境,如果我将源码在linux环境下编译,不就会出问题吗?

C++ 跨操作系统本身就很复杂(当然也与你的项目有关)。不只第三方库,自己的程序都可能又很多适配要做。有时反而需要一些第三方库提供一个统一的上层接口,方便自己开发。

你如果希望自己的程序可以跨平台,那么所有的依赖都必须可以跨平台。

难道需要把第三方源码也随源码发布一起编译,或者编译生成多个平台下的库,编译时根据环境选择

C++ 程序跨平台,在源码级里都会又很多开关,因为不同平台的 api 不一样 ... 这个肯定是需要根据环境选的。是不是要一起发布源码,就看你的需要了。一般如果你不需要去改你的依赖的话,通常是不会一起发布的。写好依赖,每个平台自己去解决依赖的问题。

宣传栏