UE4 C++ 使用第三方库(动态库) 详解

目录

  • 1 代码共享的方式
  • 2 使用三方库
    • 2.1 准备一个动态库(包含.h;.lib;.dll)
    • 2.2 创建一个UE C++工程
    • 2.3 配置三方库

1 代码共享的方式

在使用三方库之前,先介绍一下三方库的由来,以及为什么需要三方库。就从程序员共享代码成果开始讲述。

1)三种共享方式:

代码分发也就是代码共享的方式有三种:源码动态库静态库

  1. 源码头文件(.h)+源文件(.cpp)
  2. 动态库头文件(可选)+LIB文件导入库,可选)+DLL文件
  3. 静态库头文件(.h)+LIB文件非导入库
    在这里插入图片描述

2)头文件、LIB文件、DLL文件作用时段

预备知识:C或C++程序从源文件到生成可执行文件exe需经历四个阶段:分别是预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。

阶段任务
预处理将所有**#define删除,并展开所有的宏定义**;处理所有的条件预编译指令;处理**#include**预编译指令,将被包含的文件直接插入到预编译指令的位置;删除所有注释;添加行号和文件标识,一遍编译时产生调试用的行号及编译错误警告行号;保留所有的#pragma编译器指令;等等;
编译编译是将预处理生成的文件,经过词法分析、语法分析、语义分析以及优化后编译成若干个目标模块。可以理解为将高级语言翻译为计算机可以理解的二进制代码,即机器语言
汇编有些地方说汇编是把编译后的产出翻译成机器语言。
链接链接阶段所要完成的工作,是将同一项目中各源文件生成的目标文件(.obj)和程序中用到的库文件整合为一个可执行文件。虽然库文件明确用于链接,但编译器提供了2种实现链接的方式,分别称为静态链接动态链接。采用静态链接方式实现链接操作的库文件称为静态链接库(简称静态库);采用动态链接方式实现链接操作的库文件称为动态链接库(简称动态库)。

作用时段:头文件在编译时使用。LIB文件在链接时使用;DLL文件在运行时使用;
在这里插入图片描述

2 使用三方库

2.1 准备一个动态库(包含.h;.lib;.dll)

如果不知道怎么编译或者创建动态库的去查看其他文章;

本文准备了一个gdal的动态库,学习GIS的同学应该不陌生,这是一个负责处理栅格和矢量数据的三方库。
内容包括bin、include、lib(分别存放了.dll动态库、.h头文件、.lib动态库导入库文件)
在这里插入图片描述

2.2 创建一个UE C++工程

本文创建了CPP_ThirdParty工程,并在Source文件夹下,新建一个ThirdParty目录,将gdal动态库复制进去。
在这里插入图片描述

2.3 配置三方库

  1. 进入***.Build.cs文件,获取到Source文件目录(可以手动输入,也可以通过代码自动获取,这里直接手动输入路径)
string sSourceDir = new string("O:/UE5_Projects/Practices/CPP_ThirdParty/Source");
  1. 配置三方库的头文件路径和导入库路径。(别忘记加入命名空间)
//---------------------------------------------------------------------------------------------------------------------
// 添加命名空间
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
//---------------------------------------------------------------------------------------------------------------------
 // 1.配置头文件路径PublicIncludePaths.AddRange(new string[] {Path.Combine(ModuleDirectory, sSourceDir+"/ThirdParty/gdal-3.5.1/include"),});// 2.配置导入库.lib路径PublicAdditionalLibraries.AddRange(new string[] {Path.Combine(sSourceDir+"/ThirdParty/gdal-3.5.1/lib/vc16_x64", "gdal.lib"),});
  1. 将.dll动态库拷贝到Binaries\Win64目录下。(不拷贝的话,编译不会出错,运行会报错,因为dll是运行时加载到内存的)

在这里插入图片描述

  1. 新建一个函数并调用三方库中的函数,测试是否配置成功。(这里就不再详细说明如何新建函数了,属于基础知识)

首先要include头文件,其次就是调用三方库中的函数

#include "./ThirdParty/gdal-3.5.1/include/gdal.h"
//---------------------------------------------------------------------------------------------------------------------
// 说明:使用gdal库函数
// 日期:2023-9-15
//---------------------------------------------------------------------------------------------------------------------
void ATestThirdPartyActor::UseGdal()
{int a = GDALDataType::GDT_Byte;UE_LOG(LogTemp, Warning, TEXT("GDALDataType::GDT_Byte = %d"), a);return;
}

调用结果输出如下:调用成功!!!
在这里插入图片描述
如果显示错误 C4668 没有将“GNUC”定义为预处理器宏,用“0”替换“#if/#elif”错误。
则添加下面一行代码即可。

bEnableUndefinedIdentifierWarnings = false;

总结:***Build.cs文件所以代码如下:

using UnrealBuildTool;//---------------------------------------------------------------------------------------------------------------------
// 添加命名空间
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
//---------------------------------------------------------------------------------------------------------------------public class CPP_ThirdParty : ModuleRules
{public CPP_ThirdParty(ReadOnlyTargetRules Target) : base(Target){//添加下面一行解决//错误	C4668	没有将“__GNUC__”定义为预处理器宏,用“0”替换“#if/#elif”	UeCesiumEx_TaiWan	O:\Other\3D\UE5_Projects\Cesium\UeCesiumEx_TaiWan\Source\UeCesiumEx_TaiWan\PlotSync\cereal\details\traits.hpp	34bEnableUndefinedIdentifierWarnings = false;PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });PrivateDependencyModuleNames.AddRange(new string[] {  });//-------------------------------------------------------------------------------------------------------------//作者:何浩文//日期:2023-9-15//说明:配置第三方库//-------------------------------------------------------------------------------------------------------------string sSourceDir = new string("O:/UE5_Projects/Practices/CPP_ThirdParty/Source");// 1.配置头文件路径PublicIncludePaths.AddRange(new string[] {Path.Combine(ModuleDirectory, sSourceDir+"/ThirdParty/gdal-3.5.1/include"),});// 2.配置导入库.lib路径PublicAdditionalLibraries.AddRange(new string[] {Path.Combine(sSourceDir+"/ThirdParty/gdal-3.5.1/lib/vc16_x64", "gdal.lib"),});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP 协议

IP协议格式 四位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6,其他版本只在实验室中存在,没有大规模商用 四位首部长度 设定和TCP一样,IP报头是可变长的,IP报头又是带有选项(可以有,可以没有)的,这里的单位也是4个字节,也就是最大有16*464个字节的长度 …

PHP8中调换数组中的键值和元素值-PHP8知识详解

在php8中使用array_flip()函数可以调换数组中的键值和元素值。 在PHP8中使用array_flip()函数可以调换数组中的键值和元素值&#xff0c;示范代码如下&#xff1a; <?php$stu array("子涵"> 001,"欣怡"> 002,"梓涵">003,"晨曦…

华为云云耀云服务器L实例评测|centos7.9在线使用cloudShell下载rpm解压包安装mysql并开启远程访问

文章目录 ⭐前言⭐使用华为cloudShell连接远程服务器&#x1f496; 进入华为云耀服务器控制台&#x1f496; 选择cloudShell ⭐安装mysql压缩包&#x1f496; wget下载&#x1f496; tar解压&#x1f496; 安装步骤&#x1f496; 初始化数据库&#x1f496; 修改密码&#x1f4…

外卖小程序开发指南:打造完美的点餐体验

第一步&#xff1a;项目设置和初始化 首先&#xff0c;您需要选择一个适合您的开发平台&#xff0c;例如微信小程序、支付宝小程序或其他移动应用平台。接下来&#xff0c;创建一个新的小程序项目&#xff0c;并初始化所需的文件和目录。 示例代码&#xff08;微信小程序&am…

02_elasticsearch 核心概念

02_elasticsearch 核心概念 1、lucene和elasticsearch的前世今生2、elasticsearch的核心概念 1、lucene和elasticsearch的前世今生 1、lucene和elasticsearch的前世今生 lucene&#xff1a;最先进、功能最强大的搜索库。但是直接基于lucene开发&#xff0c;非常复杂&#xff…

pcl--第十节 点云曲面重建

曲面重建技术在逆向工程、数据可视化、机器视觉、虚拟现实、医疗技术等领域中得到了广泛的应用 。 例如&#xff0c;在汽车、航空等工业领域中&#xff0c;复杂外形产品的设计仍需要根据手工模型&#xff0c;采用逆向工程的手段建立产品的数字化模型&#xff0c;根据测量数据建…

透视俄乌网络战之四:西方科技巨头的力量

透视俄乌网络战之一&#xff1a;数据擦除软件 透视俄乌网络战之二&#xff1a;Conti勒索软件集团&#xff08;上&#xff09; 透视俄乌网络战之三&#xff1a;Conti勒索软件集团&#xff08;下&#xff09; 西方科技巨头的力量 1. Palantir2. SpaceX3. Maxar Technologies4. Cl…

【虚幻引擎】UE5 VLC接入网络监控、视频直播、网络直播支持RTSP、RTMP

一、如何更新自己的插件匹配自己想要的UE版本 我们在网上下载的插件一般是UE4版本的插件&#xff0c;这个时候就需要我们自己去修改编译&#xff0c;接下来教大家修改插件来适配自己的引擎。 如果不想自己编译代码&#xff0c;可以直接找我拿编译好的UE5.0、UE5.1、UE5.2的插件…

【算法思想】排序

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

机器学习笔记 - 视频分析和人类活动识别技术路线简述

一、理解人类活动识别 首先了解什么是人类活动识别,简而言之,是对某人正在执行的活动/动作进行分类或预测的任务称为活动识别。 我们可能会有一个问题:这与普通的分类任务有什么不同?这里的问题是,在人类活动识别中,您实际上需要一系列数据点来预测正确执行的动作。 看看…

servlet开发-通过Tomcat部署一个简单的webapp

首先我们得下载安装Tomcat&#xff0c;推荐看Tomcat&#xff08;HTTP服务器&#xff09;下载以及认识&#xff0c; 我们将通过打印一个hello word的方式来熟悉servlet开发,通过Tomcat部署一个webapp的流程 servlet的含义 Tomcat提供了一系列的api接口&#xff0c;这些api背后…

【进阶C语言】字符串与内存库函数认识与模拟实现

本章内容大致目录&#xff1a; 1.strlen函数 2.strcpy函数 3.strcmp函数 4.strcat函数 5.strstr函数 6.strtok函数 7.strerror与perror函数 8.字符操作函数 9.内存操作函数 10.总结 以上函数均属于库函数&#xff0c;有的函数则会介绍如何模拟实现。 一、strlen函数…

【DDPM论文解读】Denoising Diffusion Probabilistic Models

0 摘要 本文使用扩散概率模型合成了高质量的图像结果&#xff0c;扩散概率模型是一类受非平衡热力学启发的潜变量模型。本文最佳结果是通过根据扩散概率模型和朗之万动力学的去噪分数匹配之间的新颖联系设计的加权变分界进行训练来获得的&#xff0c;并且本文的模型自然地承认…

UE 虚幻引擎 利用LOD,Nanite技术优化场景性能

目录 0 引言1 LOD1.1 LOD定义1.2 UE5中的LOD技术1.3 HLOD&#xff08;Hierarchical Level of Detail&#xff09; 2 Nanite2.1 UE5的Nanite技术2.2 Nanite介绍2.2.1 Nanite的优势2.2.2 Nanite网格体与传统静态网格体的不同2.2.3 Nanite支持的类型2.2.4 在地形中使用Nanite 0 引…

递归,搜索与回溯

1.汉诺塔问题 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘子可以滑入任意一根柱子。一开始&#xff0c;所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动…

VOP —— Noise

目录 Turbulent Noise —— 计算1D/3D类型的Noise Anti-Aliased Flow Noise —— 生成抗锯齿噪波 Anti-Aliased Noise —— 生成抗锯齿噪波 Curl Noise —— 创建divergence-free 3D噪波 Curl Noise 2D —— 创建divergence-free 2D噪波 Flow Noise —— 生成1D/3D Perli…

人力资源HR 怎么选择在线人才测评工具

测评已经是普及度很好了&#xff0c;不仅仅是大企业&#xff0c;中小企业也都在启用人才测评&#xff0c;也有叫素质测评等等&#xff0c;内容多样化。但是根本形式是一样的&#xff0c;那就是在线测评&#xff0c;目的也是一样的&#xff0c;就是为了招来最适合的职员。 而市…

以太坊智能合约的历史里程碑: 从DAO到数据隐私的技术演进

文章目录 系列文章目录前言一、时间线 项目介绍总结 前言 在短短的几年内&#xff0c;以太坊不仅成为了去中心化应用和智能合约的主导平台&#xff0c;而且也见证了区块链技术和应用的多次重大革命。本文详细回顾了自2016年至今&#xff0c;以太坊生态所经历的几个关键时刻与技…

阿里云产品试用系列-容器镜像服务 ACR

阿里云容器镜像服务&#xff08;简称 ACR&#xff09;是面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台。 ACR 支持全球同步加速、大规模/大镜像分发加速、多代码源构建加速等全链路提效&#xff0c;与容器服务 ACK 无缝集成&#xff0c;帮助企业…

Windows 基于Visual Studio 开发Qt 6 注意事项

前提条件&#xff1a; 1、Visual Studio 2022 社区版(免费版) 2、Qt-6.5.1版本 Qt Vistual Studio Tools下载 先打开Visual Studio 2022 社区版 &#xff1a; 点击扩展-》管理拓展按钮后&#xff0c;在搜索框中输入Qt&#xff0c;点击这里第一个扩展安装。 Qt Visual Stud…