一天JRTPLIB的编译,终于搞通了。
/**************** 编译 ****************************************/
过程如下:
1.下载JRTPLIB包,具体地址:
http://www.bairuitech.com/upimg/soft/jrtplib-3.7.1.rar 或者
http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib。
2. 解压后的文件夹中包含两个目录,jrtplib-3.7.1和jthread-1.2.1(多线程的lib,因为jrtplib用到多线程)
3. 这里使用VC6(网上多说要求安装Vs6sp6,我电脑没安,或者说是安了我也不知道)加以编译。
(好像VS2003-2005多能编译通过,我用自己电脑上的vs2010编译没通过,说是什么“...二进制...”什么的)
(VS2005编译会有warning,但不影响),主要是vs2005与VC6里面对于this指针不同的规则定义。
在编译jthread和jrtplib之前:
在project -> settings -> C/C++ -> Code generation:use run-time library中,
对于debug,选择:Debug Multithreaded DLL,对于release,则选择:Multithreaded DLL。
3-1. 首先编译jthread库,编译好后,然后将jthread-1.2.1/src内的"jmutex.h"和"jthread.h"两个头文件放入jrtplib-3.7.1/src目录下,
然后将jrtplib-3.7.1/src文件夹下所有头文件中的<jmutex.h>和<jthread.h>语句修改为"jmutex.h"和"jthread.h",
需要修改的文件为:
rtpudpv4transmitter.h、
rtpsession.h 和
rtppollthread.h。
编译时注意编译方式和jthread.lib一致,
并且设置路径包含jtrplib所有头文件,路径设置方法:工具(Tools) -> 选项(options) -> 目录(directories) -> include files
(好像做不做这一小步无所谓,做了也没什么作用,我基本上没做),编译好jtrplib.lib
/**************** 测试 ****************************************/
过程如下:
1. 使用的是vc6,因为我电脑上的vs2010根本不读我用vc6编译后的jtrplib.lib,说是二进制什么的,是乱码(要是编译我是用vs2003以上版本
编译的,那么vs2010应该会读的)。
2. 新建一个空的控制台应用程序(你想建别的也行,随便了),File -> New -> Projects -> Win32 Console Application, 选择好路径,填一
个名称即可;然后进程序,FileView视图下,Source Fies点中后File -> New ->Files -> C++ Source File 填写好一个应用程序名称即可。
(这里我填写的是server,vc6会跟我们新建一个server.cpp文件)保存,关掉vc6。
3. 现在该建的也建好了, 既然我们上面编译好了两个lib那肯定是要用到的撒。
这里,我提一下lib的作用:lib是编译过程中的链接文件,跟dll不同,dll是运行文件。若别人系统中没有该dll,你得把dll跟你的exe放一起,
lib就不同了,只要能运行成功后,即使生成的exe放到没有这个lib的系统下也是能运行的,所以你不需要慌,只要
能成功的生成exe或者dll就ok了。
目前有两个方案:
1: a. 把lib放到系统文件下,编译器会去找这个lib的。d:/vc98 / lib中(我的是这个路径,其他人的根据实际情况而定)
b. 同时jrtplib-3.7.1/src中的所有头文件h也放到系统文件夹下。d:/vc98 / include中(我的是这个路径)
2: a. 把lib放到跟server.cpp同一目录下(vs2005我就不知道是不是这样了,应该差不多)
b. 同时jrtplib-3.7.1/src中的所有头文件h也放到跟server.cpp同一目录下
其中,1、2中的a 和 b是可以互相组合的,当然把这些头文件h都放在系统文件夹下不是很环保,因为这些h很多的。我自己习惯1的a
跟2的b搭配,当然直接是2也不错
4. 现在是代码问题了。
在server.cpp的顶部加入:
#pragma comment(lib,"ws2_32.lib") //这个肯定是在系统文件夹下,因为这个lib不是我加的,是编译器自己就有的
#pragma comment(lib,"jrtplib.lib") //以下这两个lib你可以这样写在程序里面,以供调用,也可以在编译器中设置,而不需要这
#pragma comment(lib,"jthread.lib") //两行代码。Projects -> Settings -> Link -> Object/library modules 中添加
//jrtplib.lib jthread.lib (注意,当中有空格)
下面再加几句代码试试。
#include "rtpsession.h"
void main()
{
}
运行,成功,不会说不存在jrtplib.lib、jthread.lib 以及打不开rtpsession.h的情况!