在vs.net 2003中编译ns2(6):编译nam
来源:互联网 发布:淘宝几单才有2颗心 编辑:程序博客网 时间:2024/03/29 01:57
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,呵呵,好好享受吧!
- 在vs.net 2003中编译ns2(6):编译nam
- 在vs.net 2003中编译ns2(5):编译ns2
- 在vs.net 2003中编译ns2(1):编译tcl
- 在vs.net 2003中编译ns2(2):编译tk
- 在vs.net 2003中编译ns2(3):编译otcl
- 在vs.net 2003中编译ns2(4):编译tclcl
- 在vs.net 2003中编译ns2(7):编译bluehoc
- 在vs2003中编译ns2:工程文件
- NS2中,编译文件
- 在VS.NET 2005中编译c程序
- NS2-NAM
- NS2仿真中nam节点颜色设置
- NS2仿真中nam节点颜色设置
- vs.net 2003 中 编译运行directx sample项目
- ns2安装(含nam)和问题解决
- 在VS中编译Opencascade6.6.0
- 在VS中让Shader自动编译
- 在VS中让Shader自动编译
- IIS访问ASP页面时报错The requested resource is in use.的解决方法
- eXtremeComponents 的最后一页
- SQL Server应用程序中的高级SQL注入
- DBF表与SQL Server表的导入、导出
- 今天开始为妞妞写日志,也开始整理工作上的心得!
- 在vs.net 2003中编译ns2(6):编译nam
- 女子防身术浅谈
- 周末八大处之游
- bumpmap
- 有家拉
- 工作的第一天
- 论二战东线作战中德国战胜苏联的可能性
- How to study C && ASM Code(3)
- How to study C && ASM Code(6)