我正在处理一个项目,我们使用的是带有CPP-API的Basler Pylon相机。除了拍照之外,我们大部分的代码都是用Python编写的,因此我们使用swig来包装来自CPP的take_image()函数。
这些是我们对swig和g++的调用:
swig -python -c++ frompytocpp.i
g++ -c -fpic cppcamera.cpp frompytocpp_wrap.cxx
-I/opt/pylon/genicam/library/CPP/include -I/opt/pylon/include -DUSE_GIGE
-I/usr/include/python2.6
g++ -shared cppcamera.o frompytocpp_wrap.o -o _frompytocpp.so
-L/opt/pylon/lib64 -L/opt/pylon/lib -L/opt/pylon/genicam/bin/Linux64_x64
-L/opt/pylon/genicam/bin/Linux64_x64/GenApi/Generic -Wl,-E -lpylonbase
-lpylonutility
它可以编译,但在运行时尝试创建摄像机对象时,抛出了一个异常,似乎与未解决的符号有关。根据相机API手册,标志-Wl,-E非常重要,"否则链接器将无法正确地在运行时知道和匹配pylon符号"。我查看了g++的man-page,发现-Wl用于向链接器传递选项,但无法弄清楚当传递到-Wl时-E选项会做什么。有人知道吗?
仅当从python调用拍照功能时,运行时问题才会显现。因此,仅使用-Wl,-E合并cppcamera.cpp的标准编译正常工作,但创建由python中的包装器使用的共享库时缺少某些东西/不正确。您对我们的g++调用可能缺少什么有任何建议吗?