我尝试构建这个,但总是出现链接时错误。
#include <libavutil/log.h>
int main(int argc, char *argv[])
{
::av_log_set_flags(AV_LOG_SKIP_REPEATED);
return 0;
}
我的发行版是 Debian GNU/Linux 8 (jessie)。 FFmpeg是我自己搭建的,配置命令是...
$ ./configure --prefix=/usr/local --disable-static --enable-shared \
> --extra-ldflags='-Wl,-rpath=/usr/local/lib'
链接错误如下。
$ g++ foo.cpp -D__STDC_CONSTANT_MACROS -Wall \
> -Wl,-rpath=/usr/local/lib \
> $(pkg-config --cflags --libs libavutil)
/tmp/ccKzgEFb.o: In function `main':
foo.cpp:(.text+0x17): undefined reference to `av_log_set_flags(int)'
collect2: error: ld returned 1 exit status
其中输出pkg-config
is...
$ pkg-config --cflags --libs libavutil
-I/usr/local/include -L/usr/local/lib -lavutil
The objdump
显示共享对象 libavutil.so 确实有av_log_set_flogs
inside.
$ objdump --dynamic-syms /usr/local/lib/libavutil.so | grep 'av_log_set_flags'
000260f0 g DF .text 0000000a LIBAVUTIL_54 av_log_set_flags
请注意,g++
用于构建上述应用程序的命令有一个链接器选项-Wl,-rpath=/usr/local/lib
,尽管它仍然不起作用。另外,我尝试过监控inotifywait
如果调用发行版提供的其他版本。它们不是,并且在执行期间被打开的那个g++
是 /usr/local/lib/libavutil.so。
Summary:
/usr/local/lib/libavutil.so 确实有该符号。
-rpath
用于强制链接共享库。
为什么会出现链接时错误? T_T
任何建议或信息将不胜感激!谢谢!
REEDIT: ffplay
工作正常并且ldd
显示它使用/usr/local/lib/libavutil.so。因此,这些库似乎没有损坏,问题变成了如何构建我自己的代码来使用这些库。