链接-Wl,-E,它是什么意思等?

Pau*_*aul 5 python linux swig g++

我正在开发一个项目,我们正在使用带有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
Run Code Online (Sandbox Code Playgroud)

它编译得很好,但在运行时尝试创建一个摄像头对象时,抛出的异常似乎与未解析的符号有关.根据相机API手册,标志-Wl,-E是关键的"否则链接器将不会在运行时正确地知道和匹配pylon符号".我查找了g ++的man-page,意识到-Wl用于将选项传递给链接器,但无法确定传递给-Wl时-E选项会做什么.任何人?

运行时问题仅在从python调用图片拍摄功能时才会显现.所以只是标准编译的cppcamera.cpp合并-Wl,-E工作正常,但是当我们创建python中的包装器使用的共享库时,某些东西不正确/缺失.关于我们的g ++中可能缺少什么的任何建议 - 调用?

ken*_*ytm 3

可以查看(如果设置为用作链接器)的帮助手册:ldgccld

-E
--export-dynamic
--no-export-dynamic

创建动态链接的可执行文件时,使用-E选项或--export-dynamic选项会导致链接器将所有符号添加到动态符号表中。动态符号表是运行时动态对象可见的符号集。

如果您不使用这些选项中的任何一个(或使用该--no-export-dynamic选项来恢复默认行为),则动态符号表通常仅包含链接中提到的某些动态对象引用的符号。

如果您用于dlopen加载需要引用程序定义的符号的动态对象,而不是其他动态对象,那么您在链接程序本身时可能需要使用此选项。

如果输出格式支持,您还可以使用动态列表来控制应将哪些符号添加到动态符号表中。参见 的描述--dynamic-list