Я работаю над проектом, в котором мы используем камеру Basler Pylon, которая поставляется с CPP-API. Большая часть нашего другого кода, кроме фотосъемки, написана на Python, поэтому мы используем swig для переноса функции take_image () - из CPP.
Это наши вызовы 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 имеет решающее значение, «иначе компоновщик не будет знать и правильно сопоставлять символы пилона во время выполнения». Я посмотрел man-страницу для g ++, понял, что -Wl используется для передачи параметров компоновщику, но не смог понять, что будет делать опция -E при передаче в -Wl. Кто-нибудь? * * 1006
Проблема времени выполнения проявляется только тогда, когда вызывается функция фотографирования из python. Так что просто стандартная компиляция cppcamera.cpp, включающая -Wl, -E, работает нормально, но что-то не так / отсутствует, когда мы создаем разделяемую библиотеку, используемую оболочкой в python. Любые предложения о том, что может отсутствовать в наших вызовах g ++?