http://blog.csdn.net/lunweiwangxi3/article/details/48373033
UE4使用第三方库
就怕 辜负了所有的努力,也配不上自己的野心 ...
现在,我就把虚幻引用第三方库并打包完成这个所有步骤,过程,细节都记录下来.
第一步:先做一个库
a.打开vs2013->新建项目->VC++空项目->项目名称:MyDLL确定
b.右击项目->添加->类->名称:Mine->确定,于是便有了Mine.h,和Mine.cpp这两个文件
这里先插播一个陨石坑:原先,我不想自己做库,我想在虚幻C++中运用C++标准库,令人无奈的是,C++标准库对DWORD类型有个定义:unsigned long,但是!!!凡事都有个但是!虚幻引擎也有个对DWORD类型的定义,好,就算它们定义的都一样,都是unsigned long,都会避免不了类型重定义的问题.如果是自己写的库,随便删一个就行,但是!!!凡事都有个但是!一个是C++标准库,集广大劳动人民智慧结晶;一个是虚幻源代码,两尊大神一个都不能动.
有两个解决办法,原理都差不多,第一种:定义一个自己的类,在.cpp文件中包含C++标准库,这样,虚幻中引用自己的头文件,就不会重复定义报错了.机智.但是!!!凡事都有个但是!虚幻C++代码中每一个类,必须包含 项目名.h,项目名.h里面只有 #include "Engine.h",也就是,虚幻每个类都要包含#include "Engine.h",不然就报错...这样一来,火线和地线又要碰面了,GG思密达...第二种方法,继承第一种方法,封装成库文件,这样,就只要.h头文件即可.哈哈.
c.我们就封装一个Add函数, Mine.h 内容如下: int Add(int a, int b); Mine.cpp内容如下:int Add(int a, int b){ return a+b; }
到处函数到库有两种方法,一种是加前缀 _declspec(dllexport) 比如_declspec(dllexport) int Add(int a, intb);这样导出的dll就有了;
第二种加模块文件.def . 右击项目->添加->新建项->代码->模块定义文件(.def)->名称:Source.def->添加.打开该def模块文件,添加这几行:
LIBRARY MyDLL //项目名称为MyDLL
EXPORTS //导出
Add //导出Add这个函数,若有别的函数要导出,继续添加.
关于更多,请百度.
d.右击项目->属性->常规->配置类型->改成:动态库(.dll)或者静态库->应用->确定->编译项目(Release模式)
这里有两点需要注意:1.C++的Release模式对应的是虚幻代码中的Develop-Edit模式,另外,选了Release,重新执行d步骤 ; 2.看看是不是都是32位或者64
这时候 在Release文件夹下就有 MyDLL.dll 和 MyDLL.lib 文件了,其它的中间文件pdb,exp,不要.第一步,生成第三方库,完毕.
(每次修改库源码,都要重新编译,替换掉这3个文件,静态库2个)
第二步:虚幻C++代码调用库
曾经的我是多么天真无邪,天真地认为虚幻c++会和标准c++是一个物种,但是我错了...
插播一个行星坑:虚幻代码中,引用外部库嘛.太简单了,项目->属性->配置属性,添加包含目录,库目录,ok,代码中载入库文件 #pragma comment(lib,"MyDLL.lib ");大功告成!yes,能 编译,能运行,能装逼,但是!凡事都有个但是!!!一打包,我艹,才发现它不认识这个库~~!!!
打个不成文的切当比方 标准C++好比是一匹骏马,虚幻C++好比是一头帅驴,它们生个一个骡子,该骡子也很牛比,能跑能跳能装逼,但是!凡事都有个但是!!!它不孕不育!!!!!!!!!
都走到这一步了,确实伤心,也不会搞,眼看就要辜负自己所有的野心了.我就百度了.没用.官网回答中心找了好多好多资料,看了好多好多英文,感觉还不错,有道字典查查,练练英文,哎哟,不错哦.眼光一亮,竟然遇到个SB遇到的问题和我一样!!!点击打开链接(注:SB是我对大神们的尊称,无恶意)
让我死也没想到的是,虚幻C++竟然要在C#文件中改配置,我堂堂一个c++程序员,新建的是C++虚幻项目,居然还有在C++文件中配置不了事情.真的想不到...
a.创建一个虚幻C++项目->C++->空白->没有初学者内容->命名Test002->创建项目
b.把刚才我们做好的库复制到虚幻项目文件夹下,这样创建文件夹,并对号入座:
c.打开虚幻项目中的 项目名称.Build.cs文件
打开,并添加库和包含目录
(记得添加 using System.IO;)
如果是静态库,这样设置包含目录和库就行了;但是,如果是动态库,那就要把.dll文件剪切放到生成EXE的目录下,比如32位的,就放到Binaries/Win32.编译,不过,就是路径的问题了,好好核对.这才是虚幻C++的添加外部库的方式--用C#...(我好像看懂了些什么...虚幻想让C++和C#结为亲家...)
注意哦,如果虚幻C++中运用标准C++加载库的方式,包含目录,库目录,#pragma comment(...)的话,你就准备生骡子吧!!!
第三步:打包
CS配置路径也配置好了,该做的都做了,不该做的也都做了,打包竟然给我出了这样一个错误:
现在,插播一个神坑:
这错误轻描淡写得连它妈妈都不会改...