主要参考网站: http://blog.csdn.net/senophen/article/details/7349045 http://zhaostudy2.blog.163.com/blog/static/1353502052011182538414/ http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html
一、软件/源代码下载地址: rtmpdump-2.3+ openssl-1.0.0 rtmpdump:http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz openssl:http://www.openssl.org/source/openssl-1.0.0.tar.gz ActivePerl-5.12.2.1202-MSWin32-x86-293621:http://downloads.activestate.com/ActivePerl/releases/5.12.2.1202/ActivePerl-5.12.2.1202-MSWin32-x86-293621.msi zlib-1.2.5: http://cdnetworks-kr-1.dl.sourceforge.net/project/libpng/zlib/1.2.5/zlib-1.2.5.tar.gz nasm-2.10.01-installer:http://www.nasm.us/pub/nasm/releasebuilds/2.10.01/win32/nasm-2.10.01-installer.exe
二、 1. 编译openssl1.0.0 a) 下载并安装ActivePerl b)下载并安装nasm p.s.要将安装后的nasm加入环境变量path :C:\Users\L\AppData\Local\nasm;或者将C:\Users\L\AppData\Local\nasm目录下 nasm.exe改名为nasmw.exe然后复制到openssl源代码目录下。 否则会出现错误:’nasmw’ 不适nebulizer或外部命令,也不是可运行的程序 NMAKE:fatal errorU1077:’nasmw’:return code ‘0x1’ 出现错误后,若使用改变环境变量的方法,需要关掉命令窗口重新执行命令。 c) 解压openssl压缩包 d) 运行Visual Studio Command Prompt(2010),切到openssl目录,分别执行以下命令。 >perl Configure VC-WIN32 --prefix=c:\some\dir >nmake -f ms\nt.mak nmake -f ms\nt.mak成功的话应提示生成了openssl.exe并返回1。 (执行nmake -f ms\ntdll.mak一般都不会产生什么错误,但是编译出来的是动态库,不是想要的静态库) 执行nmake -f ms\nt.mak可能出现如下错误: 解决方法:运行cl.exe,以及C:\ProgramFiles\Microsoft Visual Studio 9.0\VC 目录下的vcvarsall.bat,之后可能需要关闭命令行窗口再执行一遍命令。 又出现link.EXE:return code ‘0x460’:(将源代码重新解压一遍,再编译就成功了==。。) 2. 编译zlib a) 解压zlib压缩包 b) 运行VisualStudio Command Prompt(2008),切到zlib-2.1.5目录,分别执行以下命令 >cd contrib\masmx86 c) 回到zlib目录,进入contrib\vstudio\vc9目录,打开vs2008解决方案文件, 在zlibstat工程属性中,去掉预编译宏ZLIB_WINAPI d) 选择debug或release编译即可 TIP 1、执行c步骤时,打开的工程里,要把debug/Release栏旁边的Itanium改选成win32,否则在选择工程属性时会出来对话框提示,Theoperation could not be completed! TIP2、预编译宏位于,工程属性面板,ConfigurationPropertiesà c/c++àPreprocessoràPreprocessorDefinition 3. 编译librtmp a) 首先打开visualstudio 2010,新建一个win32 console工程librtmp,指定为静态链接库,取消precompiled header b) 将librtmp的代码导入工程,把openssl、zlib的头文件和librtmp放在一起,把编译好的openssl和zlib的静态库放在工程下的文件夹中。 lib文件夹: E:\rtmpdump-2.3\librtmp目录中所有的.h和.c文件。复制到librtmp工程下。并添加到HeaderFiles和SourceFiles c) 在工程设置中,添加之前编译好的openssl和zlib的依赖库,编译即可。libeay32.lib ssleay32.lib zlibstat.lib d)在vs2008 toolsà optionà projects and solutionsàvc++ directories里边,把OpenSSL和Zlib的 include和lib路径都添加进去。 Include files添加路径 C:\openssl\include 和 D:\Projects\librtmp\librtmp Include Libraries : C:\openssl和D:\Projects\librtmp\librtmp\lib e) 首先编译文件hashswf.c,您一定会得到错误找不到 stdint.h头文件这个文件网上有搜索自己下载stdint.h添加到工程中 D:\Projects\test\librtmp\Release中的librtmp.lib就是所要的库文件。 g)测试库是否可正常使用 新建win32工程,选择静态库,取消预编译头,添加librtmp.lib的外部依赖项。 之后在头文件中加上 #pragma comment(lib,"WS2_32.lib")///////////add (因为出现1>librtmp.lib(rtmp.obj): error LNK2001: unresolved external symbol __imp__send@16等一系列错误) #pragma comment(lib,"winmm.lib")///////////add (因为出现1>librtmp.lib(rtmp.obj): error LNK2001: unresolved external symbol __imp__timeGetTime@0等错误) #pragma comment(lib, "zlib.lib")///////////add (因为出现1>librtmp.lib(hashswf.obj): error LNK2001: unresolved external symbol _inflateInit_等错误) 但是还会出现错误: librtmp.lib(rtmp.obj): error LNK2001: unresolved external symbol _snprintf,etc 测试程序:
f)需要按照http://zhaostudy2.blog.163.com/blog/static/1353502052011182538414/修改源代码,再重新编译。 但是,这样编译出来的librtmp.lib 在使用的时候会出现很多个外部符号未定义的错误。如下图所示:
这是librtmp的条件编译导致的问题,解决方法是:在rtmp_sys.h中把代码: #ifdef _XBOX #else /* !_XBOX */ 改为 #include <winsock2.h> #define snprintf _snprintf 然后,删除rtmp.c中的如下代码: #ifdef _DEBUG 和 #ifdef _DEBUG 和 #ifdef _DEBUG (8)编译rtmp.c即可得到librtmp.lib (ripple0713) |