我正在尝试构建一个共享库,我收到以下错误:
libavformat.so:找不到版本节点 为符号 av_dup_packet @ LIBAVFORMAT_52
LD: 无法设置动态部分大小: 价值不佳
有人知道这个错误意味着什么吗?主机是i586-linux目标是arm-linux
编辑:已解决,请参阅评论
答案 0 :(得分:3)
它是由内联汇编指令.symver
引起的。我的解决方案是手动修改生成的config.h以禁用版本节点符号。
查看internal.h行214-223
答案 1 :(得分:2)
在将libsctp构建到自定义构建环境中时遇到此错误。
解释了符号版本控制here,并且可以使用链接描述文件来控制它。在我的情况下,我能够通过添加到特定于目标的LDFLAGS makefile变量来引入现有的版本链接器脚本:
$(LIB_PATH)/libsctp.so: LDFLAGS += \
-Xlinker --version-script=$(MODULE_PATH)/src/lib/Versions.map
答案 2 :(得分:1)
哦,libavformat/util.c
中的was moved in April 2009函数到libavcodec/avpacket.c
中的新文件。 comment in internal.h明确声明:
如果函数从一个库移动到另一个库,则必须在原始位置保留包装器以保持二进制兼容性。
但是当在库之间移动函数时,不可能保持二进制兼容性。
请注意,这个错误是在一年多前Chromium project报告的。
顺便说一句,无需手动修改config.h
:您可以./configure --disable-symver
运行。
答案 3 :(得分:0)
其他人需要向我指出这一点,所以我想我也可以把它放在这里,所以像我这样的人可以理解ognian的回答:
这转换为在您运行config.h
并将./configure
- 相关条目设置为0后编辑SYMVER
。如下所示:
#define HAVE_SYMVER 0
#define HAVE_SYMVER_GNU_ASM 0
#define HAVE_SYMVER_ASM_LABEL 0