C++ - 为现有库创建 Pythonwrapper
C++ - Create Pythonwrapper to existing Library
我需要为现有的 C++ 模块编写 python 包装器。首先,我用这个基本示例测试了程序(现在实际上工作正常):
现在我尝试更改设置:我想使用现有的库而不是我的单个 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
我想 link 使用 -L 命令针对给定库中的两个 .a 文件。我没有收到任何错误,但是当我尝试通过 ipython 导入模块时,我得到了这个:
import myprojection # I load libproj.so in this python file
OSError: ./libproj.so: undefined symbol: _Z29calibration_loadPKcjbP14camera_typetS2_
原来的框架里有一个函数"calibration_load",还有一个"camera_type"。但我不知道两者之间的神秘事物从何而来。
抱歉我含糊不清的解释,我试图尽可能地解释它,但 C++ 包装器不是我觉得 "at home".
的主题之一
问题是您没有链接到您在 C++ 代码中使用的外部库;将 -l<library>
添加到您的第二个 g++
电话。
g++ -shared projectionWrapper.o
-L./build/base -L./build/interface
-loriginterface -lorigbase
-Wl,-soname,libproj.so
-o libproj.so
完成任务。感谢您提示我实际上没有 link 库,因为我只使用了 -L 选项。
而且选项的顺序是错误的。我必须在开头声明 "projectionWrapper.o",以及在“-lorigbase”之前声明“-loriginterface”。这是在这里回答的:"undefined reference" when linking against a static library
(库的完整名称是:liboriginterface.a 和 liborigbase.a)
我需要为现有的 C++ 模块编写 python 包装器。首先,我用这个基本示例测试了程序(现在实际上工作正常):
现在我尝试更改设置:我想使用现有的库而不是我的单个 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
我想 link 使用 -L 命令针对给定库中的两个 .a 文件。我没有收到任何错误,但是当我尝试通过 ipython 导入模块时,我得到了这个:
import myprojection # I load libproj.so in this python file
OSError: ./libproj.so: undefined symbol: _Z29calibration_loadPKcjbP14camera_typetS2_
原来的框架里有一个函数"calibration_load",还有一个"camera_type"。但我不知道两者之间的神秘事物从何而来。
抱歉我含糊不清的解释,我试图尽可能地解释它,但 C++ 包装器不是我觉得 "at home".
的主题之一问题是您没有链接到您在 C++ 代码中使用的外部库;将 -l<library>
添加到您的第二个 g++
电话。
g++ -shared projectionWrapper.o
-L./build/base -L./build/interface
-loriginterface -lorigbase
-Wl,-soname,libproj.so
-o libproj.so
完成任务。感谢您提示我实际上没有 link 库,因为我只使用了 -L 选项。
而且选项的顺序是错误的。我必须在开头声明 "projectionWrapper.o",以及在“-lorigbase”之前声明“-loriginterface”。这是在这里回答的:"undefined reference" when linking against a static library
(库的完整名称是:liboriginterface.a 和 liborigbase.a)