基本环境说明
由于C++的执行速度快、控制粒度细,Python上层开发方便、迭代速度快,故经常可以遇到C++写好接口供Python调用的情况,但是其中bug还不少(尤其是动态链接库一个链接另一个,就会产生比较复杂的关系)
我这里算试出了一种解决方案,供大家参考
尝试了g++,实在没解决动态库相互链接的问题,最后用CMake解决的
具体实现
整体思路
C++做完封装后,用CMake生成动态链接库.so,在Python中使用Ctypes调用该动态链接库中的函数
CMakeLists.txt
# src/CMakeLists.txt# 查找源代码文件
set(SOURCE_FILES main.cpp)# 生成可执行文件
add_executable(main ${SOURCE_FILES})
# 生成.so
add_library(ctrl SHARED ${PROJECT_SOURCE_DIR}/source/base_ctrl.cpp)
# link_directories(/home/xxx/Desktop/aheadform/xxxxx/Proj_01/lib)
target_link_libraries(ctrl /home/xxx/Desktop/aheadform/xxxxx/Proj_01/lib/ccc.so)# 设置库文件的路径
link_directories(${CMAKE_SOURCE_DIR}/lib)set(EYOU_LIB_PATH ${CMAKE_SOURCE_DIR}/lib)# add_executable(test main.cpp)target_link_libraries(main ${EYOU_LIB_PATH}/libeu_harmonic.so pthread)
add_executable用于生成可执行文件,也就是编译后的结果
add_library用于生成动态链接库
target_link_libraries用于告知CMake,生成动态链接库时,需要依赖什么库
link_directories用于告知CMake,依赖的库需要去哪里调用,我这里图方便,直接在target_link_libraries里就写了绝对地址
Python
…
C++
…