使用MSVC使用Libass编译FFmpeg

时间:2017-08-18 10:39:14

标签: c++ ffmpeg mingw msys

首先是一些背景知识。

我尝试使用libass扩展/配置选项在Windows上编译ffmpeg。

使用visual studio项目libass-msvc我使用Visual Studio作为静态库构建了libass。

然后我用MSYS和pkg-config安装了MinGW。按照ffmpeg MSVC installation guide上的说明,我将环境配置为使用MSVC链接器构建并构建x64。

当我尝试使用./configure配置libass进行编译时--enable-libass --toolchain = msvc我在日志文件中收到以下错误:

  

找不到文件ass / ass.h

     

pkg-config找不到libass

我已尝试以下方法来解决此问题。

  1. 为libass创建一个.pc文件,并将其添加到PKG_CONFIG_PATH环境变量中。请参阅下面的文件内容(执行此操作后,pkg-config libass --version会打印0.81,而不是正确的版本号,但至少会显示一些内容。)

  2. 将libass .h文件复制到MinGW / include / ass文件夹中,将.lib文件复制到MinGW / libs文件夹中。

  3. 将libass include和bin文件夹添加到PATH环境变量

  4. 下载libass和依赖项源,然后尝试使用MSYS与MSVC编译器构建它。我的目标是能够使用" make install"让MinGW将libass安装到正确的位置。在尝试修复链接器错误数小时后,我放弃了这个想法,因为一些libass依赖项使得文件只能与GCC GNU编译器一起使用。

  5. 使用MinGW make / make install使用GCC GNU编译libass然后尝试使用GNU库安装libass。这又导致链接器错误(我知道这是个坏主意,但值得一试)。

  6. 尝试使用额外的lib并包含构建配置选项--extra-cflags =" ffmpeg-dir / extra / include" \ --extra-LDFLAGS =" ffmped-DIR /额外/ ffmpeg_build / lib中"然后将libs和.h文件添加到这些位置

  7. .pc文件

    libass.pc:
    prefix=/MinGW
    includedir=libass-directory/include
    libdir=libass-director/x64/bin/
    
    Name: libass
    Description: Libass project
    Version: 0.13.7
    

    如果有人能够对我做错的事情提出任何见解或建议,我现在完全陷入困境并且缺乏想法。

    更新

    我创建了包含libass路径的INCLUDELIBDIR环境路径变量。现在正确包括libass。但是,我现在为函数check_ass_library_init获取以下链接器错误。

      

    check_func_headers ass / ass.h ass_library_init       check_ld cc       check_cc       BEGIN ./ffconf.RZMYFWdc/test.c        1 #include        2 #include        3 long check_ass_library_init(void){return(long)                  ass_library_init; }       4 int main(void){int ret = 0;       5 ret | =((intptr_t)check_ass_library_init)& 0xFFFF的;       6返回; }                 END ./ffconf.RZMYFWdc/test.c       cl -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS = 64 -D_LARGEFILE_SOURCE -       D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -       D_WIN32_WINNT = 0x0502 -nologo -c -Fo./ffconf.RZMYFWdc/test.o       ./ffconf.RZMYFWdc/test.c       test.c的       ./ffconf.RZMYFWdc/test.c(3):警告C4311:'输出':指针截断       来自' ASS_Library *(__ cdecl *)(无效)'长期'       ./compat/windows/mslink -nologo -out:./ ffconf.RZMYFWdc / test.exe       ./ffconf.RZMYFWdc/test.o psapi.lib advapi32.lib shell32.lib ole32.lib       test.o:错误LNK2019:未解析的外部符号ass_library_init       在函数check_ass_library_init中引用       ./ffconf.RZMYFWdc/test.exe:致命错误LNK1120:1个未解析的外部       错误:使用pkg-config

    找不到libass

    使用ass_library_init的libass测试项目使用相同的lib文件编译很好,libs看起来很好。

    从我从这行"./compat/windows/mslink -nologo -out:./ffconf.RZMYFWdc/test.exe ./ffconf.RZMYFWdc/test.o psapi.lib advapi32.lib shell32.lib ole32.lib"看到的,libass没有被传递给链接器。 我怀疑在使用MSVC进行编译时,配置文件没有在make文件中创建libass的链接。

    我是正确还是我要以错误的方式编译?

0 个答案:

没有答案