libavdevice 和 x11 的静态链接库应该以什么顺序链接?
In what order should statically linked libraries for libavdevice and x11 be linked?
当前静态链接我的项目时遇到问题。将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
我尝试在 -lX11 前面移动 -lXext,但得到了一大堆未定义的引用,例如
error: undefined reference to `uncompress'
这些静态链接的库需要按什么顺序进行编译?
用于解析外部引用的链接器算法的工作方式如下:
- 按命令行顺序扫描 .o 文件和 .a 文件
- 在扫描期间,保留当前未解析的引用的列表
- 当遇到每个新的 .o 或 .a 文件 obj 时,请尝试根据 obj 中定义的符号解析列表中每个未解析的引用
- 如果在扫描结束时未解析列表中有任何条目,则抛出错误
在您的情况下,这意味着当将-lXext
移动到-lX11
前面时,uncompressed
将保持未解析状态,因为在扫描-lXext
时uncompressed
不在未解析的引用列表中。正如@jww注释中指出的那样,您可以创建一个组来解决问题,因为您反复尝试使用每个新添加的库来解决每个未解决的引用,这意味着顺序无关紧要。 这可以通过以下方式完成:-Wl,--start-group lib.o ... list.o -Wl,--end-group
,您将lib.o ... list.o
替换为上面的库。
相关文章:
- GLFW需要链接什么?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- Red Hat:使用<atomic>编译很好,但链接器找不到__atomic_store_16;什么库?
- 在使用库时,找到要链接的必要库的快速方法是什么
- libavdevice 和 x11 的静态链接库应该以什么顺序链接?
- CSUF EPP - 你有什么想法(在添加到链接列表末尾时遇到麻烦)
- Microsoft Visual中的此链接器错误有什么问题
- 当显式链接已经隐式链接的库时会发生什么
- 是什么导致macOS Mojave上的GoogleTest链接错误
- 覆盖 CPP 中的链接以指向模拟实现
- g++中“main( )”的链接是什么
- 我如何附加双链接以指向正确的节点,以相反的顺序打印
- 以下功能的链接是什么
- BH R封装可以链接以提高"math"和"numeric"吗?
- gcc/ld:什么对-Wl,-rpath在动态链接中什么对-l在静态链接中
- Visual studio c++静态链接做什么
- 与gcc和g++的链接有什么区别吗?
- 名称或类型具有某种语言链接意味着什么