目前在静态链接我的项目时遇到问题。将 avdevice 添加为静态链接后,我收到以下错误。
:-1: error: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libXext.a(XShm.o): undefined reference to symbol '_XGetBitsPerPixel'
以下是我静态添加的库的片段。
LIBS += -L"/usr/local/lib" \
-L"/usr/local/lib64" \
-lm -lz -llzma -lass -lfreetype -lmp3lame -ltheora -lvorbis -lvorbisenc -lva -lva-drm -lva-x11 -ldrm -logg -lvpx -lopenh264 -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -lX11 -lXfixes -lXext -lxcb -lXdmcp -lXau \
我尝试将 -lXext 移到 -lX11 前面,但得到一大堆 undefined reference ,例如
error: undefined reference to `uncompress'
这些静态链接库需要按什么顺序才能编译项目?
最佳答案
用于解析外部引用的链接器算法工作方式如下:
在您的情况下,这意味着在移动
-lXext
时在 -lX11
前面, uncompressed
将保持未解决为 uncompressed
-lXext
时不属于 Unresolved 引用列表的一部分正在被扫描。正如@jww 在评论中指出的那样,您可以 创建群摆脱问题,因为您反复尝试使用每个新添加的库解决每个 Unresolved 引用,这意味着顺序无关紧要。这可以通过以下方式完成:
-Wl,--start-group lib.o ... list.o -Wl,--end-group
, 在哪里替换 lib.o ... list.o
与您上面的库。
关于c++ - libavdevice 和 x11 的静态链接库应该以什么顺序链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59427968/