当前在静态链接我的项目时遇到问题。将avdevice添加为静态链接后,我收到以下错误。
:-1:错误:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libXext.a(XShm.o):未定义对符号'_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的前面,但得到了一堆未定义的引用,例如
error: undefined reference to `uncompress'
这些静态链接的库需要按什么顺序才能编译项目?
需要需要符号的库/目标文件通常应该在任何提供符号之前列出。
解析外部引用的链接器算法的工作方式如下:
[在您的情况下,这意味着当将-lXext
移到-lX11
之前时,uncompressed
将保持未解析状态,因为在扫描uncompressed
时-lXext
不在未解析引用列表中。正如@jww在注释中指出的那样,您可以创建组消除问题,因为您要反复尝试使用每个新添加的库来解决每个未解决的引用,这意味着顺序无关紧要。可以通过以下方式完成此操作:-Wl,--start-group lib.o ... list.o -Wl,--end-group
,用您的上述库替换lib.o ... list.o
。