VS2017 编译Windows下可用的librtmp 库

librtmp 是开源项目rtmpdump的一个子模块,官网:,librtmp库封装了rtmp协议,可以用于rtmp推流/拉流,编译rtmpdump 需要用到openssl,zlib第三方库,下面分步骤介绍。

可以直接从官网页面的git库获取,也可以在 下载,选择最新的rtmpdump-2.3.tgz,下载并解压。带有windows的是已经编译好的,包里面有rtmpdump.exe等,可以直接使用。

2、建立工程,配置环境

VS2017 新建一个Dll工程

去掉预编译头

工程建立完成后,移除dllmain.cpp,将librtmp目录下的所有文件添加到工程下(编译库只需要librtmp目录),在项目路径下添加include,lib目录,设置好包含目录和库目录。

添加好文件后,在项目属性->C/C++->预处理器添加以下定义,

_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
ZLIB_WINAPI

项目属性->链接器->输入->附加依赖项添加以下依赖性。

libeay32.lib
ssleay32.lib
zlibwapi.lib
ws2_32.lib
winmm.lib

3、添加第三方库

下载zlib, ,解压进入contribvstudiovs14,双击zlibvc.sln 打开进行编译,编译完成后,将

生成的lzlibwapi.lib文件拷贝到工程路径下的lib目录,头文件zconf.h、zlib.h,放在include目录。

下载编译好的openssl:,这里我用的是别人编译好的openssl,openssl编译也是一个坑。我选的是,高版本的OpenSSL没有libeay32.lib、ssleay32.lib,名字已经发生改变! 安装完成后拷贝openssl的头文件,dll和lib文件到项目工程下。

4、解决编译相关问题

报错大概如下

修改点:

1、 rtmp.c strdup 386行处 改为_strdup

2、strcasecmp报错,在rtmp_sys.h 添加以下宏定义,用_stricmp代替strcasecmp

#define strcasecmp _stricmp
#define strncasecmp  _strnicmp

3、netstackdump、netstackdump_read报错是因为没有声明该变量,可以直接Release,也可以在合适的地方声明或者注释掉相关代码。

4、重新编译,完成。

经验分享 程序员 微信小程序 职场和发展