gpt4 book ai didi

c++ - libavdevice 和 x11 的静态链接库应该以什么顺序链接?

转载 作者:行者123 更新时间:2023-12-01 14:53:56 26 4
gpt4 key购买 nike

目前在静态链接我的项目时遇到问题。将 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'

这些静态链接库需要按什么顺序才能编译项目?

最佳答案

用于解析外部引用的链接器算法工作方式如下:

  • 以命令行顺序扫描.o文件和.a文件
  • 在扫描期间,保留当前未解析引用的列表
  • 当遇到每个新的 .o 或 .a 文件 obj 时,尝试根据 obj
  • 中定义的符号解析列表中每​​个未解析的引用。
  • 如果扫描结束时未解析列表中有任何条目,则抛出错误

  • 在您的情况下,这意味着在移动 -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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com