提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
之前项目中用到boost-python,便于脚本中调用c++的类库暴露的接口,一直没有时间来记录,今天遇到将动态链接改成静态链接失败的问题,特此记录一二,给同样遇到此问题的各位同仁一个参考。
提示:以下是本篇文章正文内容,下面案例可供参考
一、编译
1.准备工作
将下载的boost库解压缩到指定的目录,开始里面,找到msvc编译工具,如下图:
然后进入解压之后的boost库目录,复制当前的路径,如:E:\MODLE_PG_SVN_SRC\GACII_PG_MODULE\Common\thirdparty\boost_1_71_0,如下图:
我这边只用python模块,因此只编译boost的python库,如果整个编译的话,需要耗费很长时间,很多其他模块也用不到。
2.编译
博主这边项目用的还是python2.7,首先编译静态库:
命令如下:b2 toolset=msvc-14.1 --build-type=complete --with-python link=static address-model=64
会在lib目录生成库文件;
动态编译,需要先新建一个配置文件,记录python的安装位置,参考博客:
链接
二、使用步骤
1.引入库
在pro文件引入静态库:
win32:CONFIG(debug, debug|release):{
#DESTDIR = -L$$PWD/../../Common/thirdparty/Python/Library #../../../bin/debug
DESTDIR = ../../../bin/debug
win32: LIBS += -L$$PWD/../../Common/thirdparty/Python/Library/ -lpython27_d
LIBS += -L$$PWD/../../Common/thirdparty/ftplib/ -lQt5Ftpd
}
else:win32:CONFIG(release, debug|release):{
DESTDIR = ../../../bin/release
win32: LIBS += -L$$PWD/../../Common/thirdparty/Python/Library/ -lpython27
LIBS += -L$$PWD/../../Common/thirdparty/ftplib/ -lQt5Ftp
}
INCLUDEPATH += $$PWD/../../Common/thirdparty/Python/Include
DEPENDPATH += $$PWD/../../Common/thirdparty/Python/Include
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../../Common/thirdparty/Python/Library/python27.lib
else:win32-g++: PRE_TARGETDEPS += $$PWD/../../Common/thirdparty/libpython27.a
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/../../Common/thirdparty/boost_1_71_0/stage/lib_gd/libboost_python27-vc141-mt-x64-1_71.lib
博主里面用到了其他的库,python27和QFtp,可忽略。只需要看最后一行,Msvc的版本,如果你是MinGw的编译器,需要写win32:win32-g++,注意一下,当然编译boost-python库也需要mingw版本编译。
别忘了引入包含路径:
INCLUDEPATH += ../../Common/thirdparty/boost_1_71_0
博主这边是动态库里面使用了boost的python库,TEMPLATE = lib 的。
TARGET = DllPGClient #pydllclient
TEMPLATE = lib
但是使用的时候,还是报错了,找不到库文件。如下图:
2.解决
编译没有问题,引入也没有问题,于是在另一位博主的博客发现了一个问题,boost的默认是动态库,需要在pro文件修改编译参数链接静态库,巨坑啊:
DEFINES += BOOST_PYTHON_STATIC_LIB
特此记录