我阅读了很多类似的问题,但没有一个可以解决我的问题。我感觉只需要迈出一小步就能成功...
我有一个现有的c++项目,尝试包含一些FFmpeg函数。当在Windows操作系统上使用MinGW链接FFmpeg库时,我总是收到“undefined reference to”的错误消息。
我将我的代码完全简化为以下示例:
我有一个现有的c++项目,尝试包含一些FFmpeg函数。当在Windows操作系统上使用MinGW链接FFmpeg库时,我总是收到“undefined reference to”的错误消息。
我将我的代码完全简化为以下示例:
// 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”的语句,但没有成功。