visual studio 2017
qt 5.7.1(别人已经编译好的静态库,为什么用别人编译好的,自己编译老是编译错误,?)
1. 安装vcpkg。将应用程序内的lib编译成功。设置编译选项为MTD哦。
用vcpkg安装这些:
libevent:x64-windows-static
openssl:x64-windows-static
zeromq:x64-windows-static
berkeleydb:x64-windows-static
secp256k1:x64-windows-static
leveldb:x64-windows-static
有个地方需要注意,在项目的vcproj文件中加入这个属性:vs编译的时候就会自动寻找vcpkg安装的目录:
<VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
<VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
再也不用自己手动去指定include目录,lib目录,和输入lib文件了。
2. 编译bcd,bc-cli项目。
3. 编译带qt界面的bitcoin-qt。
这里主要是安装vs qt 插件和加入qt库的链接。
a. 安装vs qt 插件,记得一定要启动哦,别弄成禁用(在vs的扩展更新里面安装)
b. 下载别人已经编译好的qt库
https://www.npcglib.org/~stathis/blog/precompiled-qt4-qt5/
c. 下载完后选择static静态库。我的是x64位的。然后为什么动态库不行呢,因为咱们的项目都是MTD的链接方式,而这里面static静态库是MTD编译出来的。
d. 在vs里面指定静态库的路径,库的输入里面默认是这几个:
qtmain.lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib
e. 发现有编译错误。将宏注释掉即可:QT_INIT_METAOBJECT , QT_WARNING_PUSH ,QT_WARNING_DISABLE_DEPRECATED
f. 发现Qt5Core.lib链接错误,因为还缺少别的qt库,不着急,再加上
Qt5PlatformSupportd.lib
qminimald.lib
qoffscreend.lib
qwindowsd.lib
qtfreetyped.lib
qtharfbuzzngd.lib
qtpcred.lib
OK。 bitcoin-qt终于出来了。
对了:有个链接问题得说明一下:
. int __cdecl qInitResources_bitcoin_locale(void)" (?qInitResources_bitcoin_locale@@YAHXZ),该符号在函数 "int __cdecl GuiMain(
. int __cdecl qInitResources_bitcoin(void)" (?qInitResources_bitcoin@@YAHXZ),该符号在函数 "int __cdecl GuiMain(int,char * * const)
这是因为bitcoin.cpp里面的两行代码:
Q_INIT_RESOURCE(bitcoin);
Q_INIT_RESOURCE(bitcoin_locale);
qt把资源文件写到代码中,函数qInitResources_bitcoin和qInitResources_bitcoin_locale的实现就是根据bitcoin.qrc
和bitcoin_locale.qrc生成出来的,所以需要把这两个文件加入到项目中。(这两个文件是qt编辑的),而后vs会生成qrc_bitcoin.cpp和qrc_bitcoin_locale.cpp。这里面就有上面两个函数的实现了。
对了,需要在项目中加入moc文件的路径哦,不然vs找不到。
这个链接也可供参考:https://blog.csdn.net/qq_16149777/article/details/78744074
总结:把静态库、动态库搞清楚哦,另外vs的设置,inlcude路径、lib路径这些搞清楚。
另外提个事“如何判断.lib是静态库还是导入库”?
答:VS 路径C:\Program Files\Microsoft Visual Studio 10.0\VC\bin” 自带的一个工具 - lib.exe: 运行 lib /list hello.lib
如果输出: hello.obj,则是静态库
如果输出: hello.dll,则是动态库的导入库。
另外我要把MD,MTD搞清楚,别稀里糊涂的。