C++基础-如何引入第三方静态库、动态库或自定义库

C++基础-如何引入第三方静态库、动态库或自定义库

概述

C++作为比较老的开发语言,在依赖库的引入上并没有做到像现在Java、Js、C#含有依赖管理工具协助完成大部分内置库、第三方库的自动引入、下载、配置、补全等。
C++无论是内置库还是第三方库,都需要自己手动进行查找、配置、引入等工作。
本文即是帮助完成C++项目对于库、框架如何完成依赖引入达成可调用的目的,重点讲述开发工具Visual Studio中的操作,若是在命令行使用CMake链接库可参考以下链接中关于库、链接的配置说明:CMakeLists详解

静态库(.lib)

静态库引入适用用于大部分无开源的第三方库,开发者不需要关心库的具体实现如何,直接将库文件放到自己的项目里,引入进行调用即可,非常方便可靠。
无论库是否有开源,最终能通过生成或下载拿到静态库文件.lib和头文件.h即可使用静态库引入方式。步骤如下:

已编译好的库

使用glfw作为示例官方下载地址

  1. 将下载好的静态库文件glfw.lib和glfw.h按照想要的路径放置到解决方案里,例如【解决方案】\Dependencies\glfw\文件夹里;
  2. 在VS开发工具里打开应用程序项目属性(右键打开),找到C++》常规》附加包含目录,添加头文件所在基础路径$(SolutionDir)\Dependencies\glfw\;。注意第一是顶部要选择全部配置和全部平台,如果只选择了其中一种配置和平台可能会报错。其次是不要删除原本附加包含目录里已有的路径,只使用分号隔开,除非你确定那些路径已经不需要;
  3. 接着上一步,重新在属性里找链接器》常规》附加库目录,添加静态库文件所在基础路径$(SolutionDir)\Dependencies\glfw\;。之后找到链接器》输入》附加依赖项,添加静态库剩余路径glfw3.lib,基础路径和剩余路径合起来才是静态库的完整路径$(SolutionDir)\Dependencies\glfw\glfw3.lib
  4. 在需要使用该库的项目文件代码里引入头文件,路径根据第2步基础路径所决定,如#include <glfw3.h>指向的是$(SolutionDir)\Dependencies\glfw\glfw3.h
  5. 现在可以开始调用静态库里的方法了,代码示例:
#include <iostream>
#include <glfw3.h>
int main() {
  int a = glfwInit();
  std::cout << a << std::endl;
}

引用依赖库

适用于有源代码的库,例如第三方开源库,或者自己的库。
相比静态库有更好的灵活性,方便对库进行专门的优化或定制开发。
可以不放到当前解决方案里,直接作为单独项目生成静态库文件和头文件,然后按照上述方式引入静态库,也可以按照下面的方法,将源代码放到解决方案里作为单独一个库项目,让应用程序项目引入,这种方式的好处是根据应用程序需要修改库代码。
还是使用上一步有开源的glfw作为示例:

  1. 将下载好的库源代码放置到解决方案里,如放到【解决方案】\glfw\文件夹里;
  2. 在VS开发工具里打开该项目属性,找到常规》配置类型,将其选择为静态库(.lib),完成后按顺序点击下方应用Apply、确定OK按钮;
  3. 在VS开发工具里打开应用程序项目属性,找到C++》常规》附加包含目录,添加头文件所在基础路径$(SolutionDir)\glfw\src\;
  4. 接着在VS开发工具应用程序项目打开引用栏(项目右键选择添加》引用),里面可以看到当前解决方案下所有库项目,包括我们第2步配置glfw库项目的名称和路径,在想要依赖的库项目前面打钩,并点击下方确定OK;
  5. 在需要使用该库的项目文件代码里引入头文件glfw3.h,路径根据第2步基础路径所决定,如#include <glfw3.h>指向的是$(SolutionDir)\glfw\src\glfw3.h
  6. 现在可以开始调用引用依赖库的方法了,代码示例:
#include <iostream>
#include <glfw3.h>
int main() {
  int a = glfwInit();
  std::cout << a << std::endl;
}

动态库(.dll)

优点是可以大幅减少exe文件的大小,让库文件在多个exe文件之间共享,适用于需要发布多个应用的解决方案,例如同时包含执行程序、更新程序、修复程序多个exe文件的大型应用。
主要用于第三方库为主,虽然也可以用于自己的库项目,但考虑到静态库比动态库总体积更小更高效率来说,自己的库项目还是直接放到解决方案里添加引用依赖即可。
依旧使用glfw动态库作为示例:

  1. 将下载好的动态库glfw.dll、glfw3dll.lib(动态库专用的链接文件)和glfw.h放到依赖下$(SolutionDir)\Dependencies\glfw\
  2. 在VS开发工具里打开应用程序项目属性,找到C++》常规》附加包含目录,添加头文件所在基础路径$(SolutionDir)\Dependencies\glfw\;
  3. 接着上一步,重新在属性里找链接器》常规》附加库目录,添加动态库文件所在基础路径$(SolutionDir)\Dependencies\glfw\;。之后找到链接器》输入》附加依赖项,添加静态库剩余路径glfw3dll.lib,基础路径和剩余路径合起来才是静态库的完整路径$(SolutionDir)\Dependencies\glfw\glfw3dll.lib
  4. 将动态库glfw.dll放到应用程序所生成的exe文件的旁边(否则点击exe直接运行时会报错找不到glfw.dll库;
  5. 在需要使用该库的项目文件代码里引入头文件,路径根据第2步基础路径所决定,如#include <glfw3.h>指向的是$(SolutionDir)\Dependencies\glfw\glfw3.h
  6. 现在可以开始调用动态库里的方法了,代码示例:
#include <iostream>
#include <glfw3.h>
int main() {
  int a = glfwInit();
  std::cout << a << std::endl;
}
  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Android Studio中引入第三方C++的步骤如下: 1. 将第三方的源代码放入项目的jni目录下,例如:`/app/src/main/jni/third_party_lib/`。 2. 在项目的`build.gradle`文件中添加以下代码: ```gradle android { // ... defaultConfig { // ... externalNativeBuild { cmake { cppFlags "-std=c++11 -frtti -fexceptions" abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } // ... } // ... externalNativeBuild { cmake { path "CMakeLists.txt" } } ``` 其中,`path`指定了CMakeLists.txt文件的路径,`cppFlags`指定了编译选项,`abiFilters`指定了支持的CPU架构。 3. 在项目的`CMakeLists.txt`文件中添加以下代码: ```cmake add_library(third_party_lib SHARED IMPORTED) set_target_properties(third_party_lib PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/third_party_lib/libthird_party_lib.so) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party_lib/include) ``` 其中,`add_library`指定了的名称,`IMPORTED`表示这是一个外部,`IMPORTED_LOCATION`指定了文件的路径,`include_directories`指定了头文件的路径。 4. 在JNI代码中调用第三方的函数。 ```c++ #include "third_party_lib/include/third_party_lib.h" extern "C" JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_callThirdPartyLib(JNIEnv* env, jobject /* this */) { ThirdPartyLib thirdPartyLib; std::string result = thirdPartyLib.doSomething(); return env->NewStringUTF(result.c_str()); } ``` 其中,`third_party_lib/include/third_party_lib.h`是第三方的头文件,`ThirdPartyLib`是第三方的类,`doSomething`是第三方的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿卢说他遇到阿玮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值