LIBS += -L../ffmpeg/lib/libavcodec.dll.a
我想要调用该库中的avcodec_register_all();函数
于是就出现 错误:undefined reference to `avcodec_register_all'
:-1: 错误:collect2: ld returned 1 exit status
出现该错误,很明显是在编译的时候,该函数没有找到定义。也就是说没有找到该库。
可是我在.pro中加了LIBS += -L../ffmpeg/lib/libavcodec.dll.a。不知道是什么原因造成的。
14 个解决方案
#1
格式是这样
LIBS += -lxxlib
LIBS += -lxxlib
#2
那我应该是这样写?
LIBS += -l../ffmpeg/lib/libavcodec.dll.a
#3
格式错了
直接写
LIBS += ../ffmpeg/lib/libavcodec.dll.a
就行了(如果你路径没错的话)
因为你这个是绝对路径
直接写
LIBS += ../ffmpeg/lib/libavcodec.dll.a
就行了(如果你路径没错的话)
因为你这个是绝对路径
#4
那什么情况下加-L呢?
#5
用简称时 使用-L指定简称所在的路径
比如-L../ffmpeg/lib -lavcodec
比如-L../ffmpeg/lib -lavcodec
#6
这个是.lib的这样写可以喔,.dll.a就不行了吧。我感觉是这样的
#7
你的感觉是错误的
另外如果在windows上的gcc,-l只会搜索.a和.dll.a结尾的,如果有多个同名,那么以.dll.a的为优先
.lib是不可能去搜索的
另外如果在windows上的gcc,-l只会搜索.a和.dll.a结尾的,如果有多个同名,那么以.dll.a的为优先
.lib是不可能去搜索的
#8
呃,述说我再vs下面调用的经验。
首先ffmpeg的头文件需要这样包含,不然确实会找不到定义
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/eval.h>
#include <libavutil/parseutils.h>
#include <libavfilter/avfilter.h>
#include <libavutil/opt.h>
};
另外我的环境是将QT集成进了VS,不需考虑.pro怎么写。
首先ffmpeg的头文件需要这样包含,不然确实会找不到定义
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/eval.h>
#include <libavutil/parseutils.h>
#include <libavfilter/avfilter.h>
#include <libavutil/opt.h>
};
另外我的环境是将QT集成进了VS,不需考虑.pro怎么写。
#9
gcc -I -L -l区别
我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:
例:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:
例:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
#10
我正在使用ffmpeg,不过遇到了些,莫名的奇怪问题!能不能分享一下你的使用?
下面是我的部分代码(在调用这个API: avcodec_register_all())出现一个问题
#include <iostream>
using namespace std;
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/eval.h>
#include <libavutil/parseutils.h>
#include <libavfilter/avfilter.h>
#include <libavutil/opt.h>
}
FILE* wfd;
int main ( int argc, char **argv )
{
//////////////////////////for init decoder
AVCodec* codec;
AVCodecContext* c= NULL;
AVFrame* picture;
AVPacket avpkt;
/////////////////////////test decode_h264()
FILE* rfd;
char* temp_p = 0;
char* decode_p = 0;
int get_frame = 0;
int frame_len = 0;
//////////write file
// wfd = fopen("xxxxx.yuv", "wb");
// if (!wfd)
// {
// fprintf(stderr, "could not open %s\n", "xxxxx.yuv");
// return -1;
// }
//avcodec_init();
avcodec_open(c,codec);
avcodec_register_all();
cout << "hello word!!!" << endl;
system("pause");
return 0;
}
这是在QT下面用MinGw编译运行时出现的问题:druing startup program exit with code 0xC0000135.
在VS中编译时:libavutil\common.h(31): fatal error C1083: 无法打开包括文件:“inttypes.h”: No such file or directory
#11
楼主 在调用库完成以后,请导出库里面的函数,或者说是,声明一下。
#12
问题已经解决了!谢谢各位
#13
你好我在用QT的.pro中包括了:
LIBS += -L -lavcodec -lavformat -lswscale -lavutil
LIBS += -L "C:\msys\1.0\local\lib\libavcodec.a"
LIBS += -L "C:\msys\1.0\local\lib\libavformat.a"
LIBS += -L "C:\msys\1.0\local\lib\libswscale.a"
INCLUDEPATH += "C:\msys\1.0\local\include\libavcodec"
INCLUDEPATH += "C:\msys\1.0\local\include\libavformat"
INCLUDEPATH += "C:\msys\1.0\local\include\libswscale"
INCLUDEPATH += "C:\msys\1.0\local\include\libavutil"
在.cpp中包括了:
extern "C"
{
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswscale\swscale.h"
#include "libavutil\avutil.h"
};
但是编译时出错:
..\ffmpeg\/ffmpegdecoder.h:8:36: error: libavcodec\avcodec.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:9:38: error: libavformat\avformat.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:10:36: error: libswscale\swscale.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:11:34: error: libavutil\avutil.h: No such file or directory
请问该怎么解决!
LIBS += -L -lavcodec -lavformat -lswscale -lavutil
LIBS += -L "C:\msys\1.0\local\lib\libavcodec.a"
LIBS += -L "C:\msys\1.0\local\lib\libavformat.a"
LIBS += -L "C:\msys\1.0\local\lib\libswscale.a"
INCLUDEPATH += "C:\msys\1.0\local\include\libavcodec"
INCLUDEPATH += "C:\msys\1.0\local\include\libavformat"
INCLUDEPATH += "C:\msys\1.0\local\include\libswscale"
INCLUDEPATH += "C:\msys\1.0\local\include\libavutil"
在.cpp中包括了:
extern "C"
{
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswscale\swscale.h"
#include "libavutil\avutil.h"
};
但是编译时出错:
..\ffmpeg\/ffmpegdecoder.h:8:36: error: libavcodec\avcodec.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:9:38: error: libavformat\avformat.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:10:36: error: libswscale\swscale.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:11:34: error: libavutil\avutil.h: No such file or directory
请问该怎么解决!
#14
工程文件中的INCLUDEPATH变量与源文件中#include后的内容组合起来应该是一个完整的路径,显然你的绝对路径是不对的,以下是正确的:
INCLUDEPATH += "C:\msys\1.0\local\include"
INCLUDEPATH += "C:\msys\1.0\local\include"
#1
格式是这样
LIBS += -lxxlib
LIBS += -lxxlib
#2
那我应该是这样写?
LIBS += -l../ffmpeg/lib/libavcodec.dll.a
#3
格式错了
直接写
LIBS += ../ffmpeg/lib/libavcodec.dll.a
就行了(如果你路径没错的话)
因为你这个是绝对路径
直接写
LIBS += ../ffmpeg/lib/libavcodec.dll.a
就行了(如果你路径没错的话)
因为你这个是绝对路径
#4
那什么情况下加-L呢?
#5
用简称时 使用-L指定简称所在的路径
比如-L../ffmpeg/lib -lavcodec
比如-L../ffmpeg/lib -lavcodec
#6
这个是.lib的这样写可以喔,.dll.a就不行了吧。我感觉是这样的
#7
你的感觉是错误的
另外如果在windows上的gcc,-l只会搜索.a和.dll.a结尾的,如果有多个同名,那么以.dll.a的为优先
.lib是不可能去搜索的
另外如果在windows上的gcc,-l只会搜索.a和.dll.a结尾的,如果有多个同名,那么以.dll.a的为优先
.lib是不可能去搜索的
#8
呃,述说我再vs下面调用的经验。
首先ffmpeg的头文件需要这样包含,不然确实会找不到定义
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/eval.h>
#include <libavutil/parseutils.h>
#include <libavfilter/avfilter.h>
#include <libavutil/opt.h>
};
另外我的环境是将QT集成进了VS,不需考虑.pro怎么写。
首先ffmpeg的头文件需要这样包含,不然确实会找不到定义
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/eval.h>
#include <libavutil/parseutils.h>
#include <libavfilter/avfilter.h>
#include <libavutil/opt.h>
};
另外我的环境是将QT集成进了VS,不需考虑.pro怎么写。
#9
gcc -I -L -l区别
我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:
例:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:
例:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面这句表示在编译hello.c时:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include-->/usr/include-->/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)
#10
我正在使用ffmpeg,不过遇到了些,莫名的奇怪问题!能不能分享一下你的使用?
下面是我的部分代码(在调用这个API: avcodec_register_all())出现一个问题
#include <iostream>
using namespace std;
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavutil/mem.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/eval.h>
#include <libavutil/parseutils.h>
#include <libavfilter/avfilter.h>
#include <libavutil/opt.h>
}
FILE* wfd;
int main ( int argc, char **argv )
{
//////////////////////////for init decoder
AVCodec* codec;
AVCodecContext* c= NULL;
AVFrame* picture;
AVPacket avpkt;
/////////////////////////test decode_h264()
FILE* rfd;
char* temp_p = 0;
char* decode_p = 0;
int get_frame = 0;
int frame_len = 0;
//////////write file
// wfd = fopen("xxxxx.yuv", "wb");
// if (!wfd)
// {
// fprintf(stderr, "could not open %s\n", "xxxxx.yuv");
// return -1;
// }
//avcodec_init();
avcodec_open(c,codec);
avcodec_register_all();
cout << "hello word!!!" << endl;
system("pause");
return 0;
}
这是在QT下面用MinGw编译运行时出现的问题:druing startup program exit with code 0xC0000135.
在VS中编译时:libavutil\common.h(31): fatal error C1083: 无法打开包括文件:“inttypes.h”: No such file or directory
#11
楼主 在调用库完成以后,请导出库里面的函数,或者说是,声明一下。
#12
问题已经解决了!谢谢各位
#13
你好我在用QT的.pro中包括了:
LIBS += -L -lavcodec -lavformat -lswscale -lavutil
LIBS += -L "C:\msys\1.0\local\lib\libavcodec.a"
LIBS += -L "C:\msys\1.0\local\lib\libavformat.a"
LIBS += -L "C:\msys\1.0\local\lib\libswscale.a"
INCLUDEPATH += "C:\msys\1.0\local\include\libavcodec"
INCLUDEPATH += "C:\msys\1.0\local\include\libavformat"
INCLUDEPATH += "C:\msys\1.0\local\include\libswscale"
INCLUDEPATH += "C:\msys\1.0\local\include\libavutil"
在.cpp中包括了:
extern "C"
{
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswscale\swscale.h"
#include "libavutil\avutil.h"
};
但是编译时出错:
..\ffmpeg\/ffmpegdecoder.h:8:36: error: libavcodec\avcodec.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:9:38: error: libavformat\avformat.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:10:36: error: libswscale\swscale.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:11:34: error: libavutil\avutil.h: No such file or directory
请问该怎么解决!
LIBS += -L -lavcodec -lavformat -lswscale -lavutil
LIBS += -L "C:\msys\1.0\local\lib\libavcodec.a"
LIBS += -L "C:\msys\1.0\local\lib\libavformat.a"
LIBS += -L "C:\msys\1.0\local\lib\libswscale.a"
INCLUDEPATH += "C:\msys\1.0\local\include\libavcodec"
INCLUDEPATH += "C:\msys\1.0\local\include\libavformat"
INCLUDEPATH += "C:\msys\1.0\local\include\libswscale"
INCLUDEPATH += "C:\msys\1.0\local\include\libavutil"
在.cpp中包括了:
extern "C"
{
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswscale\swscale.h"
#include "libavutil\avutil.h"
};
但是编译时出错:
..\ffmpeg\/ffmpegdecoder.h:8:36: error: libavcodec\avcodec.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:9:38: error: libavformat\avformat.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:10:36: error: libswscale\swscale.h: No such file or directory
..\ffmpeg\/ffmpegdecoder.h:11:34: error: libavutil\avutil.h: No such file or directory
请问该怎么解决!
#14
工程文件中的INCLUDEPATH变量与源文件中#include后的内容组合起来应该是一个完整的路径,显然你的绝对路径是不对的,以下是正确的:
INCLUDEPATH += "C:\msys\1.0\local\include"
INCLUDEPATH += "C:\msys\1.0\local\include"