Dll 链接到ffmpeg共享构建

Dll 链接到ffmpeg共享构建,dll,linker,ffmpeg,cygwin,shared-libraries,Dll,Linker,Ffmpeg,Cygwin,Shared Libraries,我试图在cygwin开发环境中使用ffmpeg库。我下载了(64位)。bin文件夹包含dll但不包含.a或.dll.a文件。链接,按如下方式进行: $ gcc encoding_mp3.o -L/cygdrive/c/Users/Desktop/webserver/cygnus/lib/w32api -L/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_shared/bin -lavcodec-54 -lm -luser32 -lp

我试图在
cygwin
开发环境中使用
ffmpeg
库。我下载了(64位)。
bin
文件夹包含
dll
但不包含
.a
.dll.a
文件。链接,按如下方式进行:

$ gcc encoding_mp3.o -L/cygdrive/c/Users/Desktop/webserver/cygnus/lib/w32api -L/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_shared/bin -lavcodec-54 -lm -luser32 -lpthread -o encoding_mp3
导致以下错误:

/cygdrive/c/Users/Desktop/webserver/cygnus/ffmpeg/ffmpeg_shared/bin/avcodec-54.dll: file not recognized: File format not recognized collect2: ld returned 1 exit status
我的问题:
1.共享生成中的
bin/
文件夹仅包含
avcodec-54.dll
。是否有办法将
dll
转换为
dll.a
.a

2.我哪里做错了

如果需要源代码,请告诉我。

您需要下载“dev”版本或“static linking”版本(页面上稍微向下一点)。 dll不能转换为LIB,也不能(通常)用于生成它们自己的小导入存根(即.dll.a)

在您链接的页面中,“Dev包提供在其他程序中使用.dll文件所需的头文件和.lib/.dll.a文件。”
.a/.lib通常位于“lib”文件夹中。

Mingw gcc能够在没有导入库的情况下链接DLL。(我不确定OP可能使用的cygwin gcc)@AntonKovalenko不知道。。很高兴知道!它是否遍历“导入”部分并动态生成存根?它遍历作为命令行参数提供的DLL的导出,是的,它能够在必要时动态生成存根。@AntonKovalenko哦,是的,对不起,我的意思是导出:)我想它只在按名称导出时有效,而不是按序号导出时有效。但我从未发现有人按序号导出,所以……无论如何,在OP的情况下,下载正确的包并从那里使用.a应该会容易得多。但很高兴知道mingw有这个选择。我怀疑,正如你所说,cygwin GCC不会以同样的方式工作;它使用不同的导出符号的约定IIRC