【发布时间】:2012-01-27 13:00:02
【问题描述】:
祝大家圣诞快乐
我正在用 gcc 编写 ffmpeg。
但是,在构建过程中,我在程序中编写的所有函数都遇到了“未定义对 xxxxx 的引用”的错误,我意识到这是由于 libxxx.a 文件造成的。
互联网上的每个顾问都建议检查目录中的文件。
所以,我在我的计算机中搜索了包含函数名称的文件,我发现 .a 文件在我编码的目录中正确设置。
还有其他名为“libxxx.dll.a”的文件,所以我尝试使用“libxxx.dll.a”文件进行构建,但得到了相同的结果。
关于这一点,我有一些问题。
1) 如果 gcc 找不到 libxxx.a 文件,它会说“找不到 –lxxx”。但它只是说“未定义对 xxxx 的引用”。这意味着那些 libxxx.a 文件在正确的目录中。
2) 如果文件没有定义函数,那就奇怪了。因为这些文件包含函数名称,并且是我在计算机中搜索过的相同文件/目录,所以我认为它应该具有函数的定义。但我不确定文件是否定义了函数,因为我自己无法读取文件。
如果我错了,我的错误是什么?
3) libxxxlib.a 文件可以替换为 libxxx.a 吗?如果可以的话,libxxxlib.a 和 libxxx.a 有什么区别? libz 和 libzlib?a 也是如此
这是我的推荐,包含 libxxx.a 文件的目录。
g++ -o C:\ffmpeg\ffmpegTest C:\ffmpeg\ffmpegTest.cc -IC:\ffmpeg -LC:\ffmpeg\3rdparty\lib -lavutil -lavformat -lavcodec -lz -lavutil -lm -D__STDC_CONSTANT_MACROS
C:\ffmpeg\3rdparty\lib
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'av_register_all()' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: undefined reference to 'av_open_input_file(AVFormatContext*, char const, AVInputFormat* , int, AVFormatParameters*)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'av_find_stream_info(AVFormatContext*)' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义引用 'dump_format(AVFormatContext, int, char const*, int)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'avcodec_find_decoder(CodecID)' 的引用
所有的错误都是
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义引用'avcodec_open(AVCodecContext*, AVCodec)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'avcodec_alloc_frame()' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'avcodec_alloc_frame()' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义引用 'avpicture_get_size(PixelFormat,int,int)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'av_malloc(unsigned int)' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: undefined reference to 'avpicture_fill(AVPicture*, unsigned char*, PixelFormat, int, int)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义引用 'avcodec_decode_video2(AVCodecContext, AVFrame*, int, AVPacket*)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: undefined reference to 'sws_getContext(int, int, PixelFormat, int, int, PixelFormat, int, SwsFilter *, swsFilter*, double const*)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: undefined reference to 'sws_scale(SwsContext*, unsigned char const* const*, int const*, int , int, unsigned char* const*, int const*)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'av_free_packet(AVPacket*)' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义引用'av_read_frame(AVFormatContext, AVPacket*)'
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'av_free(void*)' 的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对“avcodec_close(AVCodecContext*)”的引用
C:\Users\AppData\Local\Temp\ccVHLzjK.o:ffmpegTest.cc:<.text>: 未定义对 'av_close_input_file(AVFormatContext)' 的引用
【问题讨论】: