【发布时间】:2016-07-15 22:56:27
【问题描述】:
我在这里读到了很多非常相似的问题,但似乎都没有 解决我的问题。我觉得我只需要很小的一步就可以成功...
我有一个现有的 c++ 项目并尝试包含一些 FFmpeg 函数。 在 Windows 操作系统上针对 FFmpeg 库与 MinGW 链接时,我总是 错误消息“未定义对...的引用”。
我将代码完全简化为以下示例:
// START of file simple.cpp
#ifndef INT64_C
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
#include <math.h>
#include <libavutil/opt.h>
#include <libavcodec/avcodec.h>
#include <libavutil/channel_layout.h>
#include <libavutil/common.h>
#include <libavutil/imgutils.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>
int main(int argc, char **argv){
avcodec_register_all();
return 0;
}
// END of file simple.cpp
我编译:
g++ -o simple.o -c simple.cpp -std=gnu++11
效果很好。 我的链接命令是:
g++ -o simple.exe simple.o -lavcodec -std=gnu++11
我收到错误消息:
simple.o:simple.cpp:(.text+0xc): undefined reference to avcodec_register_all()
所以,至少找到了库 ;-) 我直接使用了来自 Zeranoe 的库,我也设法编译了 来自源的新的。两种情况下的错误信息都是一样的。
找到解决方案的步骤可能是以下测试(使用 gcc 而不是 g++ 编译):
我将 simple.cpp 重命名为 simple.c
-
我编译:
gcc -o simple.o -c simple.c -
我链接:
g++ -o simple.o -c simple.c -lavcodec
这样就行了!!!
但是,不幸的是,这对我来说不是解决方案,因为我的主程序 肯定是c++而且必须用g++编译。
那么,这里到底出了什么问题?
这是 FFmpeg 主题还是 gcc/g++ 主题?
拜托,欢迎所有提示。
我已经尝试了所有可能的 'extern' 和 extern "C"- 语句,但没有成功。
【问题讨论】:
-
请不要使用什么鬼话。您是否检查了 g++ 编译器版本?我的意思是降级?我觉得 g++ 有时很不稳定。
-
对不起 - 我不会再这样做了。 - g++ 没问题,只是缺少 extern-statement.Gerhard。
标签: gcc ffmpeg linker g++ mingw