【问题标题】:Linking with ffmpeg shared build与 ffmpeg 共享构建链接
【发布时间】:2013-01-28 12:43:49
【问题描述】:

我正在尝试在 cygwin 开发环境中使用 ffmpeg 库。我下载了shared build from here(64 位)。 bin 文件夹包含 dlls 但没有 .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. 我哪里错了?

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

【问题讨论】:

    标签: dll linker ffmpeg cygwin shared-libraries


    【解决方案1】:

    您需要下载“开发”版本或“静态链接”版本(在页面下方)。 dll 不能转换为库,也不能(通常)用于生成它们自己的小导入存根(.dll.a)

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

    【讨论】:

    • Mingw gcc 能够在没有导入库的情况下链接 dll。 (我不确定 OP 可能使用的 cygwin gcc)
    • @AntonKovalenko 不知道.. 很高兴知道!它是否遍历“导入”部分并动态生成存根?
    • 它遍历作为命令行参数给出的 dll 的 exports,是的,它能够在需要时动态生成存根。
    • @AntonKovalenko 哦,是的,对不起,我的意思是导出 :) 我想它只在按名称导出时有效,而不是按序号。但是我从来没有发现任何人按序数导出,所以...
    • 无论如何,对于 OP,从那里下载正确的包并使用 .a 应该会容易得多。但很高兴知道 mingw 有这个选项。我怀疑,正如你所说,cygwin GCC 不会以同样的方式工作;它使用不同的约定来导出符号,IIRC
    猜你喜欢
    • 2012-05-31
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2017-11-09
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多