使用Code::Blocks编译NERvSDK的插件示例代码

Code::Blocks(后面缩写为CB)算是我非常喜欢的一款代码编辑器,相对于Visual Studio庞大的体积,简单爽快多了。
所以,当我得知NERvSDK自带插件示例能用CB和VS来编译时,我首先选择的是CB。
事与愿违的是,VS倒是很容易就编译成功了,但是使用CB却一直报错,如:

-------------- Build: win64 in Plug-in Demo (compiler: GNU GCC Compiler)---------------
windres.exe -Iinclude -I..\..\include -J rc -O coff -i D:\SAO\NERvSDK\samples\PLUG-I~1\res\res.rc -o obj\win64\res\res.res
mingw32-g++.exe -fno-rtti -fno-exceptions -DUNICODE -DWINVER=0x0500 -O2 -DNDEBUG -finput-charset=UTF-8 -fexec-charset=UTF-8 -Iinclude -I..\..\include -c "D:\SAO\NERvSDK\samples\Plug-in Demo\src\PluginDemo.cpp" -o obj\win64\src\PluginDemo.o
mingw32-g++.exe -shared   -Wl,--dll -L..\..\lib\win64  obj\win64\src\PluginDemo.o obj\win64\res\res.res -o "..\Release\Plug-in Demo\module64.dll" -s  -lNERvRES -lNERvSDK
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text+0x23): undefined reference to `NERvLogMessageV'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear12NerveObjectTI10PluginDemoLb0EE6AddRefEv+0x16): undefined reference to `__sync_add_and_fetch_4'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear16NerveFactoryBase6AddRefEv+0x16): undefined reference to `__sync_add_and_fetch_4'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear12NerveObjectTI10PluginDemoLb0EE7ReleaseEv+0x17): undefined reference to `__sync_sub_and_fetch_4'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear16NerveFactoryBase7ReleaseEv+0x17): undefined reference to `__sync_sub_and_fetch_4'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear13NerveFactoryTI10PluginDemoLb0EE16CreateInstanceExEPNS_6MODULEEPNS_8IUnknownERKNS_3UIDEPPv+0x56): undefined reference to `NERvTraceObject'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear12NerveObjectTI10PluginDemoLb0EED0Ev[__ZN8NERvGear12NerveObjectTI10PluginDemoLb0EED0Ev]+0x2a): undefined reference to `NERvTraceObject'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text$_ZN8NERvGear12NerveObjectTI10PluginDemoLb0EED1Ev[__ZN8NERvGear12NerveObjectTI10PluginDemoLb0EED1Ev]+0x27): undefined reference to `NERvTraceObject'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text.startup+0x3): undefined reference to `_imp__NVG_ID_NULL'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text.startup+0xd): undefined reference to `_imp__NVG_ID_IUnknown'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text.startup+0x17): undefined reference to `_imp__NVG_ID_IClassFactory'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text.startup+0x21): undefined reference to `_imp__NVG_ID_IObjectFactory'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text.startup+0x2c): undefined reference to `_imp__NVG_ID_CPlugin'
obj\win64\src\PluginDemo.o:PluginDemo.cpp:(.text.startup+0x37): undefined reference to `_imp__NVG_ID_IPlugin'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 2 second(s))
14 error(s), 0 warning(s) (0 minute(s), 2 second(s))

之后,我多次尝试(此处省略尝试过程1255字)无果,也许只是因为本人对mingw使用不熟或是其他什么原因。
后来在Plug-in Demo.cbp这个文件中发现<Option compiler="gnu_gcc_compiler_x64" />这句话,经过多次百度后,转去使用bing来搜索,发现一篇相关度较高的文章CodeBlocks编译及创建wxWidgets 2.9.5工程(百度真是垃圾,浪费我多少时间)
这篇文章是和wxWidgets相关的,而SAO Utils也用到了wxWidgets,所以我猜想GPBeta可能也使用了类似方法。废话少说,直接说方法:
1、在http://tdm-gcc.tdragon.net/上下载最新版TDM-GCC,并安装,(如本人安装在D:\Program files\TDM-GCC);
2、打开CB的Settings->Compiler;
3、选择Global compiler settingsSelected compiler下的GNU GCC Compiler,(一般默认就是这里);
4、点击Copy按钮,在弹出的对话框中输入gnu_gcc_compiler_x64,点击OK按钮,在Toolchain executables选项卡下的Compiler's installation directory下输入TDM-GCC的安装路径(我的是D:\Program files\TDM-GCC),将下面三栏中的mingw32-gcc.exe和mingw32-g++.exe分别改成gcc.exe和g++.exe。
5、完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值