以无缝连接scanlib和python代码,我们需要通过python调用scanlib接口。1. 使用SWIG转换的c++版本的python版本scanlib痛饮和安装痛饮(简化包装器和接口生成器)是一个工具,提供脚本调用支持C \/ c++库。简而言之,它是用c \/ c++成为其他程序的接口和调用c \/ c++库通过其接口。写作痛饮是关键文件的接口文件,Python实现c++的转换。这个文件的格式是由Yuju.cn写的。我转换的接口文件scanlib下面并给出一个解释。%模块scanapi意味着生成的模块名称scanapi %包括std_主要用于处理字符串类,常量字符串&,特别注意不处理字符串&,因为在这种情况下,它被视为一样的一个指针。
% {# define SWIG_FILE_WITH_INIT #包括\u201D\u201C#\u201D\u201C%}添加头文件要转换%包括\u201C%\u201D\u201C公开要转换的接口,这些接口和模块生成后可以看到。您可以编写函数或包含头文件。% pointer_functions (int, intP) % pointer_functions (std:: string, stringP)这是结合%包括生成五个功能,如下:new_name()生成一个相应的类型和指针分配内存。copy_name(值)生成一个相应类型的指针,指向分配的内存分配,Delete_name (obj)释放内存Name_assign分配指针Name_value得到指针的值可以找到上面的五个功能扩展模块转换完成后,我用这个主要是处理字符串&问题,这将在稍后解释。
这是编译过程的关键,需要一个详细的了解。的格式和语法Distutils工具可以在线学习,并给出一个参考博客:下面是使用这个工具的预防措施:extra_compile_args用于添加g++ \/ gcc编译选项include_dirs添加头文件目录library_dirs添加库目录库添加库名称与上述四个在编译过程中可以解决大部分的问题。ext_modules编译过程符合扩展①痛饮python gcc编译将生成一个包文件的c文件痛饮python - c与g + + + +编译将生成一个包文件cxx类型②构建没有错误,生成python扩展模块在build \/ lib目录③scanlib生成安装安装扩展模块。
你可以改变到相应的版本操作。到目前为止我从c++转换scanlib库版本的python版本。这难道不神奇吗?接下来,我编写的python版本libtest测试(pycharm编写和测试)。找不到解决动态库:方法1:修改LD_LIBRARY_PATH环境变量特点:这种方法主要涉及临时加载动态库。在LD_LIBRARY_PATH环境变量被修改之后,它只能对当前用户生效。这个环境变量LD_LIBRARY_PATH的作用:用于指定一个路径除了系统默认路径时寻找一个动态链接库在程序加载并运行。注意,在LD_LIBRARY_PATH将搜索指定的路径系统默认路径。具体步骤:1。发现动态库的路径:sudo找到\/ - name(动态库名称)\u201D2。
添加的最后通过文件:出口LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:(绝对路径动态库所在地)4。源2。编写测试通过pycharm libtest scanlib python版本。添加在pycharm scanapi扩展模块的路径。添加路径的过程如下。单击下一个漏斗,然后单击+添加上面scanapi模块安装的路径。最后一行是我安装scanapi路径,然后单击ok以添加扩展模块路径来完成。编写代码导入scanapi libtest的python版本,然后使用生成的接口编写libtest测试的结果如下:因此,证实转换是有效和成功的。3.在这个过程中问题和想法问题1)c++接口non-const引用时,出现以下问题:类型总是错的。
谷歌和百度一直未能找到一个解决方案很长一段时间。官方文档中有一个句子,痛饮对待non-const引用和指针是一样的,这意味着当我解决指针问题,引用将被解决。最后,解决方案如下:处理过程是:①增加%:% pointer_functions (std:: string, stringP)②接口文件,然后使用_stringP()来创建一个对象类型的SwigPyObject赋值操作时使用它_分配(b,\u201Chello_lcw\u201D),然后调用(b)来解决这个问题。使用它后,你必须使用delete_name释放内存!!!!!2)找不到scanlib图书馆。添加scanlib库路径\/sbin\/ldconfig最终文件使上述路径有效。
我搜索了很多程序在互联网上,包括ctypes cython,教父,sip和痛饮,等等。我试着ctypes, cython,教父,sip和痛饮,花了很多时间。在很长一段时间里,我实现了sip在sip。几个小例子。尽管sip是专注于c++ \/ C到python,更少的人有问题和不充分的信息可以提供。最后,它是转移到痛饮工具。我告诉我,当选择一个计划在未来,有更多的材料选择,实现更多的用户会让你少花钱多办事。此外,在处理遇到的问题,我们必须检查信息,思考和尝试更多,这样我们就能找到最好的解决方案,这是non-const参考上面。解决问题的四个项目:出口C_INCLUDE_PATH = $ {C_INCLUDE_PATH}: \/ usr \/ include \/ opencv \/导出CPLUS_INCLUDE_PATH = $ {CPLUS_INCLUDE_PATH}: \/ usr \/ include \/ opencv \/导入的时候有一个未定义的引用问题,这很可能是cmake_lists不是写在一个模块,只找到这个文件,并将它添加。
解决方案:1:临时方法(动态库目录重新启动后将丢失)1。执行LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:动态库目录2。sudo \/sbin\/ldconfig 2:永久方法(修改配置文件)1。. so文件路径的目录添加到sudo vim和添加一行末尾的文件,其内容的路径,所以图书馆2。sudo \/sbin\/ldconfig使修改后的有效路径。Svn配置文件问题训练支持向量机失败!OpenCV错误:断言失败(& & & &((& & = = = = 1)| |(= = 1 & & = =)))在项目文件,3042行终止之后调用'cv扔一个实例::异常无情()::3042:错误:(-215)& & & &((& & = = = = 1)| |(= = 1 & & = =))在功能项目解决方案:这个问题主要是由于独立的配置文件,配置文件和配置需要添加执行文件夹下的测试。
5. 痛饮的官方文件