为什么mingw找不到gcc可以找到的库?
我正在尝试为windows和ubuntu编译一个c程序,我正在使用mingw,但它似乎找不到gcc可以找到的所需库 当我执行这个命令时为什么mingw找不到gcc可以找到的库?,gcc,mingw-w64,Gcc,Mingw W64,我正在尝试为windows和ubuntu编译一个c程序,我正在使用mingw,但它似乎找不到gcc可以找到的所需库 当我执行这个命令时 gcc decode_video.c -o dv -lavcodec -lavutil 一切都正常编译,但当我使用这个 x86_64-w64-mingw32-gcc decode_video.c -o dv.exe -lavcodec -lavutil 它说没有找到头文件 将build命令更改为 x86_64-w64-mingw32-gcc decode_v
gcc decode_video.c -o dv -lavcodec -lavutil
一切都正常编译,但当我使用这个
x86_64-w64-mingw32-gcc decode_video.c -o dv.exe -lavcodec -lavutil
它说没有找到头文件
将build命令更改为
x86_64-w64-mingw32-gcc decode_video.c -o dv.exe -I /usr/include/x86_64-linux-gnu -L /usr/lib/x86_64-linux-gnu -l avcodec -l avutil
即使库是链接的,它也会给我这个错误
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x138): undefined reference to `avcodec_send_packet'
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x192):未定义对avcodec_receive_frame'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x33f):未定义对
av_packet_alloc'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x37d):未定义对avcodec_find_decoder'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x3d0):未定义对
av_parser_init'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x421):未定义对avcodec_alloc_context3'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x481):未定义对
avcodec_open2'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x512):未定义对av_frame_alloc'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x5fc):未定义对av_parser_parse2的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x6f8):未定义对av_解析器的引用\u close'
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x707):未定义对
avcodec_free_上下文的引用'
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x716):未定义对av_frame_free'的引用
/tmp/ccgn1NTi.o:decode_video.c:(.text+0x722):未定义对
av_数据包的引用\u free'
collect2:错误:ld返回1退出状态最后,它显示您试图针对不兼容体系结构的库进行链接:
为什么mingw找不到gcc可以找到的库
- 两个编译器都在为链接器使用不同的默认选项
- 即使使用相同的
-L
和相同的LD\u LIBRARY\u路径
等,链接器也会跳过不兼容的库。在您的例子中,gcc
大概由
x86_64-linux-gnu
,而x86_64-w64-mingw32-gcc
显然由x86_64-w64-mingw32
托管。两者都不相容
尝试将-I
添加到
包含libavcodec/avcodec.h
的编译中。如果需要更多路径,请添加更多-I
。如果应该是系统标题,请使用-issystem
。将-v-H
添加到编译中,以查看正在使用哪些include路径。gcc打印:
#包括“…”搜索从这里开始:
#包括搜索从这里开始:
尝试将-L
添加到链接阶段,其中
包含要链接的库,如lib*.a
/lib*.so
。添加-Wl,-v
以查看编译器驱动程序将哪些选项传递给GNU链接器ld
确保符号在库中,例如使用nm
或x86\u 64-w64-mingw32-nm
等工具
确保使用的库是使用x86_64-w64-mingw32
工具链交叉编译的库
什么头文件?decode_video.c:34:10:致命错误:libavcodec/avcodec.h:没有这样的文件或目录#include^~~~~~~~~~~~~~~~~~~~~~~~~编译已终止。这正是我所做的。您可以在已编辑的命令中看到这些目录用于头文件和库。a位置和它生成的aeerror这是指向verbose的链接输出所述库中的符号?是的,我已经检查了它们,如果它们不存在,它将如何编译gcc@Wajdi穆赫塔迪:你不是在尝试使用相同的库,是吗?见第4条。在我的回答中。您需要使用x86_64-w64-mingw32
工具链交叉编译libs。