'未定义引用xxxxx','检查目录中的文件'它不起作用

时间:2011-12-25 05:41:28

标签: gcc ffmpeg

圣诞节,大家好,

我用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来说也一样吗?

这是我的行推荐,包含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 + 0xec&gt ;:未定义引用' av_register_all()'

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x11c&gt ;:未定义引用' av_open_input_file(AVFormatContext * ,char const ,AVInputFormat *,int,AVFormatParameters *)'

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x13b&gt ;:未定义引用' av_find_stream_info(AVFormatContext *)'

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x174&gt ;:未定义引用" dump_format(AVFormatContext,int,char const *,int)& #39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x224&gt ;:未定义引用' avcodec_find_decoder(CodecID)'

并且所有错误都是

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x281&gt ;:未定义引用' avcodec_open(AVCodecContext *,AVCodec)'

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x297&gt ;:未定义引用' avcodec_alloc_frame()'

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:< .text + 0x2a3&gt ;:未定义参考' avcodec_alloc_frame()'

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x2e6&gt ;:未定义引用&#39; avpicture_get_size(PixelFormat,int,int)&#39; < / p>

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x2fc&gt ;:未定义引用&#39; av_malloc(unsigned int)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x341&gt ;:未定义引用&#39; avpicture_fill(AVPicture *,unsigned char *,PixelFormat,int, INT)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x38c&gt ;:未定义参考&#39; avcodec_decode_video2(AVCodecContext,AVFrame *,int,AVPacket *)& #39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x409&gt ;:未定义引用&#39; sws_getContext(int,int,PixelFormat,int,int,PixelFormat ,int,SwsFilter *,swsFilter *,double const *)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x463&gt ;:未定义引用&#39; sws_scale(SwsContext *,unsigned char const * const *,int const *,int,int,unsigned char * const *,int const *)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x4bb&gt ;:未定义引用&#39; av_free_packet(AVPacket *)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x4cf&gt ;:未定义引用&#39; av_read_frame(AVFormatContext,AVPacket *)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x36c&gt ;:未定义引用&#39; av_free(void *)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x36c&gt ;:未定义引用&#39; avcodec_close(AVCodecContext *)&#39;

C:\ Users \ AppData \ Local \ Temp \ ccVHLzjK.o:ffmpegTest.cc:&lt; .text + 0x36c&gt ;:未定义引用&#39; av_close_input_file(AVFormatContext)&#39;

1 个答案:

答案 0 :(得分:0)

您应该发布完全错误消息(或至少在其前几行)。

您很可能是C++ name mangling的受害者。

undefined reference to ...几乎肯定没有与任何丢失的文件有关。