首页 > 编程语言 >关于UE4 C++项目编译rapidxml库并运行时报错问题

关于UE4 C++项目编译rapidxml库并运行时报错问题

时间:2022-09-28 12:31:39浏览次数:82  
标签:NDK C++ 编译 UE4 Android 异常 rapidxml


新建了一个UE4的C++项目,想使用第三方的rapidxml库对我以前作cocos2d-x的游戏配置数据进行解析,因为以前就用的是这个库。

发现在UEEditer里编译C++的时候不会出错,但在xcode里总是会出现下边的teasure4-mac编译出错。用了我很常时间,后来发现是因为在teasure4-mac 的target设置里的平台支持项里有iphoneos和iphonesimulator项。如下图

我们这里将teasure4-mac的SUPPORTED_PLATFORMS平台支持相关项中的iphoneos iphonesimulater两项删除,然后问题就解决了。


编译问题到是解决了,但在使用UEEditer打包ios的时候问题依旧。无奈之下只能从xml解析的源码入手了。

在rapidxml.hpp文件中加入不支持标准异常宏定义,再将另外两个使用了throw抛出异常的地方注释掉,这一次好像是正常了。



两个要修改的地方,如下,把原来的异常改成了断言。



rapidxml的xml库就可以在unreal engine中使用了。接下来我再试着将protobuf库集成到unreal engine中。


以前在使用cocos2d-x时安卓相关的问题可以查看下边说明,

安卓编译的问题参考链接:( ​​http://zengrong.net/post/2168.htm​​)


在为 DragonBonesCPP/refactoring 的 cocos2d-x-3.2 demo 增加 Android 编译时,NDK 报了一个编译错误:

error: cannot use ‘throw’ with exceptions disabled
throw std::invalid_argument(“Invalid data.”);

这是由于 DragonBonesCPP 库使用了 C++ 标准异常,而 Android NDK 编译器默认不支持 C++ 异常控制导致。

但是,从Android NDK r5 版本开始,NDK 就开始支持 C++ 异常控制了,我的版本是 r9d ,为什么还会出现这个错误呢?

原来,NDK 编译器的 C++ 异常控制特性支持默认是关闭的。要打开它,可以这样做:

编辑 Android.mk 文件,加入下面的代码:

LOCAL_CPP_FEATURES += exceptions

或者:

LOCAL_CPPFLAGS += -fexceptions

这样可以对当前项目开启 C++ 异常控制编译支持。

如果想偷懒,也可以编辑 Application.mk 文件,加入下面的代码:

APP_CPPFLAGS += -fexceptions

这样,所有模块的 C++ 异常控制编译支持都会被打开。

上面的两个 mk 文件位于 ​​proj.android/jni​



转载请注明出处: ​​http://fengmm521.blog.163.com/blog/static/25091358201552824959968/​

标签:NDK,C++,编译,UE4,Android,异常,rapidxml
From: https://blog.51cto.com/u_13760719/5719168

相关文章

  • 17、嵌入式中将(Android)手机转作为嵌入式的摄像头和终端使用(Opencv和C++Python支持)
    因为囊中羞涩,所以想把手机转换成摄像头和屏幕作为嵌入式的数据采集模块和终端显示界面;首先PC端需要安装opencv,自行百度~~~Android手机需要安装APP链接:https://pan.baidu.com/s......
  • 1、Android 移植C++ 开发的第三方.so包和.a包
     基本思想:因为本人不会写android,所以android主要以JNI学习为主方案一:首先搭建一个Android的最基本工程,完成Android调用c++的代码;方案二:然后本地写一个c++的子模块,使用......
  • UE4框架(转)
    有很多人是从UE3接触到Unreal,如果你也对UE3非常了解,便能很快的上手UE4。但是,UE4的开发模式还是有所不同的。1.谈谈过往,UE1和UE2。我知道在那个时候咱们一样挥......
  • C++源程序的压缩和解压
    C++源程序的压缩和解压实验1:C++源程序的压缩和解压一、必做内容:(一)压缩器1.为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想......
  • 14、Android Studio通过http向C++服务端传递base64图片,然后对图片处理(写入本地)返回数
    基本思想:最近做了一个项目需要使用将androidstudio中抓取的视频帧和一些数据上传服务器处理,然后将处理结果返回给androidstudio手机端一、因为不太会写通信,着实补充了一......
  • 6、C++ 静态编译链接使用库,及例子libfacedetection人脸识别应用
    直接上例子:存在三个文件 example.cpp中的文件#include<iostream>#include"function.h"usingnamespacestd;intfun(inta,intb);intmain(){cout<<fun(2,3)<<endl;cout<<......
  • C++ STL 概述_严丝合缝的合作者们
    1.初识STL什么是STL?STL(StandardTemplateLibrary)是C++以模板形式提供的一套标准库,提供了很多开发过程需要的通用功能模块。使用STL,可以让开发者将主要精力用于解......
  • C++ STL 概述_严丝合缝的合作者们
    1.初识STL什么是STL?STL(StandardTemplateLibrary)是C++以模板形式提供的一套标准库,提供了很多开发过程需要的通用功能模块。使用STL,可以让开发者将主要精力用于解决......
  • 实现C++智能指针
    在对象切片一文中,提到可使用充当智能指针的类shape_wrapper,可以简化资源的管理,从根本上消除资源(包括内存)泄漏的可能性,本节来看下如何将shape_wrapper改造成一个完整的智......
  • C++语言程序设计基础 内联函数
    C++内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数......