为现有库创建Pythonwrapper
C++ - Create Pythonwrapper to existing Library
本文关键字:创建 Pythonwrapper 更新时间:2023-10-16
我需要为现有的c++模块编写一个python包装器。首先,我用这个基本示例测试了这个过程(现在它实际上工作得很好):c++ - Python绑定ctypes -在函数
中返回多个值现在我尝试更改设置:我想使用现有的库而不是我的单个cpp文件。我试着这样做:
g++ -c -I. -fPIC projectionWrapper.cpp -o projectionWrapper.o
g++ -shared -Wl,-soname,libproj.so
-L./build/liborig_interface.a,./build/liborig_base.a
-o libproj.so projectionWrapper.o
我想用-L命令链接给定库中的两个。a文件。我没有得到任何错误,但当我试图通过ippython导入模块时,我得到这个:
import myprojection # I load libproj.so in this python file
OSError: ./libproj.so: undefined symbol: _Z29calibration_loadPKcjbP14camera_typetS2_
在原始框架中有一个"calibration_load"函数,以及一个"camera_type"函数。但我不知道中间那些神秘的东西是从哪里来的。
为我的模糊解释感到抱歉,我试图尽可能地解释它,但是c++包装器不是我觉得"自在"的主题之一。
问题是你没有链接到你在c++代码中使用的外部库;将-l<library>
添加到第二个g++
呼叫中
g++ -shared projectionWrapper.o
-L./build/base -L./build/interface
-loriginterface -lorigbase
-Wl,-soname,libproj.so
-o libproj.so
完成了任务。谢谢你的提示,我实际上没有链接库,因为我只使用了-L选项。
而且选项的顺序是错误的。我必须声明"projectionWrapper"。开头的"O",以及"-lorigbase"之前的"-loriginterface"。这里回答了这个问题:"未定义的引用"。当链接到静态库
时(库的全称是:liboriginterface)。A and liborigbase.a)
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 为现有库创建Pythonwrapper