Связывание с -Wl, -E, что это значит и т. Д.

Я работаю над проектом, в котором мы используем камеру 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 является критическим, «иначе компоновщик не будет знать и правильно сопоставить символы пилона во время выполнения». Я просмотрел справочную страницу для g ++, понял, что -Wl используется для передачи параметров компоновщику, но не мог понять, что будет делать параметр -E при передаче -Wl. Кто-нибудь?

Проблема времени выполнения проявляется только тогда, когда функция создания снимков вызывается из python. Таким образом, стандартная компиляция cppcamera.cpp, включающая -Wl, -E, работает нормально, но что-то не так / отсутствует, когда мы создаем разделяемую библиотеку, используемую оболочкой в ​​python. Есть предложения по поводу того, чего может не хватать в наших вызовах g ++?

5
задан om-nom-nom 25 February 2012 в 12:46
поделиться