jrtplib-3.9.1在VC6.0下编译

jrtplib-3.7.1提供了VC6的工程
jrtplib-3.9.1没提供,自己搭环境发现还有头文件没生成好,要CMake
牛的话可以参考CMakeList将XX.h.in改为xx.h
一番挣扎后放弃了
在网上找到有人用VS2010编译成功的案例
基本步骤一样,需要过滤IPV6就可以了(vc6那时候还没有ipv6,不支持正常)
(编译这个VC6可能需要升级到SP6,本人不确定)

一 资源下载
cmake http://www.cmake.org/cmake/resources/software.html(建议下载win32安装版)

安装cmake

二 JTHREAD编译
jrtplib依赖 jthread, jthread需要先编译安装
打开cmake
按下图设置
jrtplib-3.9.1在VC6.0下编译 - 幻想少佳 - 幻想少佳的博客

设置好源码路径,和目标工程路径,点击配置按钮,选择VC6,就会生成以下内容

jrtplib-3.9.1在VC6.0下编译 - 幻想少佳 - 幻想少佳的博客

点击Generate按钮,生成工程文件
在工程目录中用vc6打开,选择以下项,就会进行编译
并且会将头文件和生成的库拷贝到安装目录下(我这里就是C:\Program Files\jthread)

jrtplib-3.9.1在VC6.0下编译 - 幻想少佳 - 幻想少佳的博客


三 JRTPLIB编译
 方法同上,编译时会发现以下错误,问题应该是没去掉IPV6
jrtplib-3.9.1在VC6.0下编译 - 幻想少佳 - 幻想少佳的博客
 
jrtplib-3.9.1在VC6.0下编译 - 幻想少佳 - 幻想少佳的博客

解决方法:
能否使用是根据jrtplib-3.9.1\tools下对应的文件能否编译通过来判断支不支持的
修改ipv6test.cpp 只要让它编译同不过就行
例:
int main(void)
{
struct sockaddr sa;
sa.sa_len = 0;
struct sockaddr_in6 addr;
addr.sin6_family = PF_INET6;
return 0;
}
菜单栏 file-delete cache 删除缓冲
重新配置,生成工程文件即可
jrtplib-3.9.1在VC6.0下编译 - 幻想少佳 - 幻想少佳的博客

5个例子也都可以打开学习
 C:\Program Files\jrtplib
C:\Program Files\jthread
所需头文件跟lib都会被复制到以上目标,可以加入到自己的项目中




编译运行例子工程:
运行一个例子程序 
用VC新建一个Win32的空工程,我命名为test1,把jrtplib-3.6.0/examples目录下的example1.cpp复制到该工程的目录下。在工程中建一个文件夹header专门用来保存头文件,把jrtplib-3.6.0/src目录中的头文件复制到header文件夹中,这时就可以在test1把example1.cpp和这些头文件加入到工程中去,(Add Files to Project.)。 
打开example1.cpp进行编译.发现错误…test1\example1.cpp(6) : fatal error C1083: Cannot open include file: 'rtpsession.h': No such file or directory Error executing cl.exe. 
找不到头文件 rtpsession.h, 我们把example1.cpp源码改一下#include "rtpsession.h" 改成#include "header/rtpsession.h", header就是我们建的那个文件夹名。同样的,把其它头文件包含的都改过来。有引号的改,其它像#include <stdlib.h> 是系统目录的,不用改。 
此时再次编译,又出链接错误。原因很简单了,因为我们还没把jrtplib.lib和jthread.lib引入到工程当中去,还有网络通信少不了的ws2_32.lib库,在源码的头顶处加上  #pragma comment(lib,"jrtplib.lib") #pragma comment(lib,"jthread.lib") #pragma comment(lib,"ws2_32.lib") 
也可以在Project -> setting -> Link 中把 jrtplib.lib jthread.lib ws2_32.lib 加进去,这样就不用在源码上改了。 
加进去后,再编译,又是链接错误,这时还得改一个地方,也是最后一个地方,Project -> setting -> C/C++ ,Category中选择Code Generation,然后在Userun-time library中选择Multithreaded DLL,因为我们用到了多线程的链接库,得修改这个地方。 
报错:vc中error LNK2001:unresolved external symbol _WinMain@16 
原因:用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数(vc这时的默认设置是针对控制台程序的)。 

解决方法: 
1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS 
2.进入project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows. 
    3. 仍然出现那个问题的话,反过来设置就应该可以了。把设置里面的windows改为console。       测试例子 
第一个提示 Enter local portbase:,一个主机端口,我输入了8989。 
第二个提示 Enter the destination IP address 输入目标IP地址,我输入了127.0.0.1本机。第三个提示 Enter the destionation port 目标端口,直接输入8888。 
第四个提示Number of packets you wish to be sent:发送包个数,输入10个,回车。 
此时错误来了:ERROR: The specified port base is not an even number,主机端口错了...原因是jrtplib只能用偶数的端口号....重新试了一下,输入 6666 127.0.0.1 8888 10 ,终于可以发了。 
但是还有一个问题,就是发的时候为什么收不到,源码中有接收的。原来把本地端口号和目标端口号一致就可以接收得到了。输入8888 127.0.0.1 8888 10,再测试 Sending packet 1/10 Got packet ! 
Sending packet 2/10 Sending packet 3/10 Got packet ! Got packet ! 
Sending packet 4/10 Sending packet 5/10 Got packet ! Got packet ! 
Sending packet 6/10 Got packet ! 
Sending packet 7/10 Got packet ! 
Sending packet 8/10 Got packet ! 
Sending packet 9/10 Got packet ! 
Sending packet 10/10 Got packet ! 
Press any key to continue 
是数据传输需要一定的时间吧,有时候发一次包并不能立即收到.第一个例子就这样顺利编译完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值