在vs.net 2003中编译ns2(6):编译nam

本文介绍如何编译winnam.dll和namsh.exe,包括配置工程、添加必要的文件及依赖项等步骤。针对特定错误提供了修改建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
1              编译winnam.dll
1)        创建winnam.dll工程,记住选上“导出符号”。
2)        将工程的输出路径改为:$(SolutionDir)/Debug。原因:将所有生成的dll和exe放在同一目录下,避免产生找不到文件的情况。
3)        将中间目录改为:$(SolutionDir)/Debug/winnam。原因:个人喜爱。
4)        在“C/C++ -> 附加包含目录”中添加:
"D:/ns-allinone-2.31/nam-1.13";   // 注意此目录应该排在最前面
"D:/ns-allinone-2.31/tcl8.4.14/generic";
"D:/ns-allinone-2.31/tcl8.4.14/win";
"D:/ns-allinone-2.31/tk8.4.14/generic";
"D:/ns-allinone-2.31/tk8.4.14/win";
"D:/ns-allinone-2.31/tk8.4.14/xlib";
"D:/ns-allinone-2.31/otcl-1.13";
"D:/ns-allinone-2.31/tclcl-1.19";
"D:/ns-allinone-2.31/ns-2.31";
"D:/ns-allinone-2.31/ns-2.31/common";
"D:/ns-allinone-2.31/ns-2.31/mobile";
"D:/ns-allinone-2.31/ns-2.31/tools";
"D:/ns-allinone-2.31/ns-2.31/queue";
"D:/ns-allinone-2.31/ns-2.31/tcp";
"D:/ns-allinone-2.31/ns-2.31/apps";
"D:/ns-allinone-2.31/ns-2.31/trace";
"D:/ns-allinone-2.31/ns-2.31/mac";
"D:/ns-allinone-2.31/ns-2.31/routing";
"D:/ns-allinone-2.31/ns-2.31/link";
"D:/ns-allinone-2.31/ns-2.31/classifier";
"D:/ns-allinone-2.31/ns-2.31/sctp";
"D:/ns-allinone-2.31/ns-2.31/mcast";
"D:/ns-allinone-2.31/ns-2.31/qs";
"D:/ns-allinone-2.31/ns-2.31/adc";
"D:/ns-allinone-2.31/ns-2.31/satellite";
 “.”;
“../winotcl”;
“../wincl”;
 
5)        将“C/C++ -> 代码生成 -> 运行时库”改为“多线程调试DLL”。原因:避免C运行时库链接错误。
6)        将“C/C++ -> 预处理器定义”中添加HAVE_STL。
7)        在“C/C++ ->预编译头”中改为“自动生成”。原因:避免#include “stdafx.h”。
8)        将nam-1.13目录的所有文件添加到工程中。
9)        从工程中删除如下文件:
xwd.c
xwd.h
main.cc
win32.c
getopt.c
10)     打开rng.cc,添加如下函数
inline int gettimeofday(struct timeval *p, struct timezone *z)
{
     struct timeb tb;
     ftime(&tb);
     p->tv_sec = tb.time;
     p->tv_usec = tb.millitm;
     return 0;
}
11)     打开nam_stream.cc,添加定义:
#define die(str) exit(1)
12)     将wintcl.dll、wintk.dll、winotcl.dll、wincl.dll、winns.dll设置为此项目的依赖项目。
13)     编译工程,生成winnam.dll
若在编译中出现pow函数的错误可在参数前加(double)强制转换即可。
出现如下错误:
d:/ns-allinone-2.31/nam-1.13/netmodel.cc(311) : error C2100: 非法的间接寻址
将本行程序
     return *Tcl_GetHashValue(he);
改为
     return *(int*)Tcl_GetHashValue(he);
 
2              编译namsh.exe
1)        创建namsh.exe工程,类型为命令行程序,选择空项目选项。
2)        在工程中添加以下文件:
D:/ns-allinone-2.31/nam-1.13/main.cc
D:/ns-allinone-2.31/nam-1.13/getopt.c
D:/ns-allinone-2.31/nam-1.13/win32.c
3)        将工程的输出路径改为:$(SolutionDir)/Debug。原因:将所有生成的dll和exe放在同一目录下,避免产生找不到文件的情况。
4)        将中间目录改为:$(SolutionDir)/Debug/nssh。原因:个人喜爱。
5)        在“C/C++ -> 附加包含目录”中添加:
../winnam;
"D:/ns-allinone-2.31/nam-1.13";   // 注意此目录应该排在最前面
"D:/ns-allinone-2.31/tcl8.4.14/generic";
"D:/ns-allinone-2.31/tcl8.4.14/win";
"D:/ns-allinone-2.31/tk8.4.14/generic";
"D:/ns-allinone-2.31/tk8.4.14/win";
"D:/ns-allinone-2.31/tk8.4.14/xlib";
"D:/ns-allinone-2.31/otcl-1.13";
"D:/ns-allinone-2.31/tclcl-1.19";
"D:/ns-allinone-2.31/ns-2.31";
"D:/ns-allinone-2.31/ns-2.31/common";
"D:/ns-allinone-2.31/ns-2.31/mobile";
"D:/ns-allinone-2.31/ns-2.31/tools";
"D:/ns-allinone-2.31/ns-2.31/queue";
"D:/ns-allinone-2.31/ns-2.31/tcp";
"D:/ns-allinone-2.31/ns-2.31/apps";
"D:/ns-allinone-2.31/ns-2.31/trace";
"D:/ns-allinone-2.31/ns-2.31/mac";
"D:/ns-allinone-2.31/ns-2.31/routing";
"D:/ns-allinone-2.31/ns-2.31/link";
"D:/ns-allinone-2.31/ns-2.31/classifier";
"D:/ns-allinone-2.31/ns-2.31/sctp";
"D:/ns-allinone-2.31/ns-2.31/mcast";
"D:/ns-allinone-2.31/ns-2.31/qs";
"D:/ns-allinone-2.31/ns-2.31/adc";
"D:/ns-allinone-2.31/ns-2.31/satellite";
 “.”;
“../winotcl”;
“../wincl”;
6)        将“C/C++ -> 代码生成 -> 运行时库”改为“多线程调试DLL”。原因:避免C运行时库链接错误。
7)        在“C/C++ ->预编译头”中改为“自动生成”。原因:避免#include “stdafx.h”。
8)        打开parser.h,在ParserTable类前加上WINNAM_API进行导出。
9)        打开paint.h,在Paint类前加上WINNAM_API进行导出。
10)     打开state.h,在State类前加上WINNAM_API进行导出。
11)     打开main.cc,在platformInit函数声明前加上extern C
12)     打开main.cc,找到如下行:
#if 0
     if (Tcl_Init(interp) == TCL_ERROR) {
         printf("%s/n", interp->result);
         abort();
     }
#endif
将之改为:
//#if 0
     Tcl_FindExecutable(argv[0]);
     if (Tcl_Init(interp) == TCL_ERROR) {
         printf("%s/n", interp->result);
         abort();
     }
//#endif
再找到如下两行:
#ifdef WIN32
     Tcl_SetVar(interp, "tcl_library", ".", TCL_GLOBAL_ONLY);
     Tcl_SetVar(interp, "tk_library", ".", TCL_GLOBAL_ONLY);
#endif
将之改为:
#ifdef WIN32
     //Tcl_SetVar(interp, "tcl_library", ".", TCL_GLOBAL_ONLY);
     //Tcl_SetVar(interp, "tk_library", ".", TCL_GLOBAL_ONLY);
#endif
13)     打开cmd.exe,并切换到ns-2.31目录,运行如下命令:
tclsh bin/tcl-expand.tcl tcl/lib/ns-lib.tcl | tcl2c et_ns_lib > ns_tcl.cc
生成ns_tcl.cc文件并将之添加到工程中。
14)     将wintcl.dll、wintk.dll、winotcl.dll、wincl.dll、winns.dll、winnam.dll设置为此项目的依赖项目。
15)     在“链接器->输入->附加依赖项”中添加Ws2_32.lib
16)     将wintcl.dll tclsh.exe tcl2c.exe三个文件复制到nam-1.13目录下,打开cmd.exe并切换到nam-1.13目录,执行命令:
tclsh bin/string2c.tcl version > version.c
在提示符下输入2.31,生成version.c文件,将之添加到工程中。
执行命令:
tclsh bin/tcl-expand.tcl tcl/nam-lib.tcl | tcl2c et_nam > nam_tcl.cc
生成nam_tcl.cc,将之添加到工程中。
进入tk8.4.14/library目录,运行如下命令:
tcl2c et_tk tk.tcl clrpick.tcl comdlg.tcl button.tcl dialog.tcl entry.tcl focus.tcl listbox.tcl menu.tcl palette.tcl scale.tcl tearoff.tcl text.tcl tkfbox.tcl msgbox.tcl
  > embedded-tk.cc
生成embedded-tk.cc,将之复制到nam目录下并添加到工程中。
17)     编译运行,如果运行过程中出现变量未初始化的错误,没关系,找到那个变量的定义将它初始化为0即可。
18)     打开lantest.nam,呵呵,好好享受吧!
 
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 在心电信号处理领域,实验(一)“心电2”主要聚焦于心电图(ECG)信号的分析与处理。心电图是记录心脏电生理活动的重要工具,被广泛用于临床诊断和健康监测。本实验的核心内容分为两部分:一是模拟数据的使用,二是RST波的检测。 实验中使用的ECG.mat文件包含了心电图信号的模拟数据。在实际研究和教学中,模拟数据常被用来代替真实采集的数据,因为它们能够精确控制、重复生成,且便于开展各种假设性实验。这些模拟数据可能包含正常的心电信号波形,如P波、QRS复合波和T波,也可能包含异常情况,如心律不齐、早搏等。通过对这些模拟信号的分析和处理,可以深入理解心电图的基本特征,并学习如何提取有用信息,例如心跳周期、心率等。 peakdetect.m是Hooman Sedghamiz在2014年编写的RST波检测程序。RST波,尤其是QRS复合波,是心电图分析的关键部分,因为它标志着心脏心动周期中的一个关键阶段——心室激动。该程序采用基于状态机逻辑的算法,这种算法通常涉及一系列预定义的状态,每个状态对应于心电信号的不同特征或变化。通过这种方式,程序能够有效识别和定位QRS波群,从而计算出心率和其他相关参数。状态机方法在信号处理中具有良好的鲁棒性和适应性,能够处理不同质量和复杂性的ECG信号。在心电信号检测中,峰检测是一个核心步骤,它涉及寻找信号中的局部最大值。peakdetect.m可能包含了对信号平滑、阈值设定、波形匹配等预处理步骤,以减少噪声影响并准确捕捉到QRS波的起点和终点。这一过程对于识别异常心律、诊断心律失常至关重要。 在实验过程中,学生和研究人员可以利用ECG.mat数据和peakdetect.m程序进行以下实践操作:1. 加载并可视化心电图信号,了解其基本形态和特征;2. 运行peakdet
斑马 Zebra ZT410 是一款工业条码打印机,具有打印速度快、分辨率可选、连接方式多样等特点,适用于快递物流、服装、医疗等多个行业: 打印性能: 打印方式:支持热转印和直热式热敏两种打印方式,可根据不同需求灵活选择。 分辨率:标准分辨率为 203dpi,还可选配 300dpi 或 600dpi,能满足不同精度要求的打印任务。 打印速度:最大打印速度可达 14ips(每秒 356 毫米),可快速完成大量标签打印工作。 打印宽度与长度:最大打印宽度为 4.09 英寸(104 毫米)。不同分辨率下打印长度不同,203dpi 时为 3988 毫米,300dpi 时为 1854 毫米,600dpi 时为 991 毫米。 内存配置:标配 256MB RAM 内存和 512MB 闪存,可存储大量标签格式和数据,确保打印任务的顺畅进行。 介质与碳带: 介质类型:支持连续纸、模切纸、有凹口的纸、黑标纸等多种介质。 介质尺寸:介质卷筒宽度(标签和底纸)为 1.00 英寸(25.4 毫米)至 4.50 英寸(114 毫米)(撕 / 切纸器),或 1.00 英寸(25.4 毫米)至 4.25 英寸(108 毫米)(剥离 / 回卷),非连续标签最大长度为 39 英寸(991 毫米)。 碳带规格:碳带标准长度为 450 米,宽度为 2.00 英寸(51 毫米)至 4.33 英寸(110 毫米),碳带墨面向外卷绕,也可选配墨面向内卷绕的碳带卷轴。 接口与连接:配备 USB 2.0、高速 RS-232 串行、10/100 以太网、蓝牙 2.1 等接口,还可选择并行接口,支持 ZebraNet 打印机服务器,能连接多种设备,实现便捷的数据传输和网络打印。 外观与结构:采用金属框架和具有超大透明视窗的两折金属介质盖,结构坚固耐用。侧面加载耗材路径,方便介质和碳带的装载。机身尺寸为 495
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值