mingw(msys2)编译libdvdread和libdvdnav
编译
获取源码:git clone https://code.videolan.org/videolan/libdvdread.git
进入源码目录,依次执行下列命令:
- libtoolize
- aclocal
- autoheader
- autoconf
- automake --add-missing
静态库
- ./configure --prefix=“你想要安装到的目录”
动态库
- ./configure --prefix=“你想要安装到的目录” --enable-shared
(在make之后出现警告:*libtool: warning: undefined symbols not allowed in i686-w64-mingw32 shared libraries; building static only*
解决办法:打开Makefile.in文件 在LDFLAGS 选项后面添加 -no-undefined 编译选项。
编译完成会生成libdvdread.lib.a(动态链接)和libdvdread.a(静态库)文件)
- make
- make install
一些解释:
libtoolize:复制/链接了一些支持脚本,包括ltmain.sh文件(这是libtool的主要组件)。
aclocal:查找配置脚本所需的所有m4宏,并生成本地副本以便于访问。
autoheader:可选,如果要使用
config.h/AC_CONFIG_HEADERS头,否则调用编译器时所有测试结果宏都将内联。
autoconf:展开configure.ac进入配置脚本。
automake:转换所有makefile.am进入makefile.in模板。可以加上–add missing选项,以便可以将其他支持脚本链接/复制到你的的项目(如compile、missing、depcomp、test-driver等)。
编译libdvdnav
编译
获取源码:git clone https://code.videolan.org/videolan/libdvdnav.git
进入源码目录,依次执行下列命令:
- libtoolize
- aclocal
- autoheader
- autoconf
- automake --add-missing
编译libdvdnav需要用到刚才编译的libdvdread库(路径替换成你安装的libdvdread库路径) - export PKG_CONFIG_PATH=/usr/local/libdvdread/lib/pkgconfig:$PKG_CONFIG_PATH
静态库
- ./configure --prefix=“你想要安装到的目录”
动态库
- ./configure --prefix=“你想要安装到的目录” --enable-shared
(在make之后出现警告:*libtool: warning: undefined symbols not allowed in i686-w64-mingw32 shared libraries; building static only*
解决办法:打开Makefile.in文件 在LDFLAGS 选项后面添加 -no-undefined 编译选项。
编译完成会生成libdvdnav.lib.a(动态链接)和libdvdnav.a(静态库)文件)
- make
- make install
注意:
如果需要在vs下使用libdvdread和libdvdnav库,不能直接将libdvdread.dll.a和libdvdnav.dll.a强制改为libdvdread.lib和libdvdnav.lib,需要在mingw下使用pexports导出libdvdread.dll的def文件,再在cmd中使用lib命令生成lib文件:
pexports.exe可在https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/下载,下载后将pexports.exe复制到mingw32和mingw64的bin目录下,我的目录是C:/msys64/mingw32/bin。
mingw命令:
pexports libdvdread-8.dll > dvdread.def
cmd命令:
32位:lib /def:dvdread.def /machine:i386 /out:dvdread.lib
64位:lib /def:dvdread.def /machine:x64 /out:dvdread.lib
libdvdnav库同理。