在win 64位机器上 编译Tcl扩展库 工具 vs2008 、64位的Tcl


       首先安装vs2008,在选择安装选项时,要将“X64 编译器和工具”选项选中,必须手动进行选中。即使选择界面上的全部安装,X64 编译器和工具”也是不被安装的。
      如果很不幸,在启动vs2008后发现X64 编译器和工具”确实没有被安装,就关闭vs2008,重新运行安装程序,不过不需要从新安装:
更改或移除vs2008  -> 添加或删除功能   -> 选中Visual C++ 下的X64 编译器和工具    更新即可。
接下来开始编译Tcl扩展库:
1、新建项目
选择   Win32 ->  Win32控制台应用程序 或者 Win32项目         两个任意选择,原因是在后面的“应用程序设置”里还要选择,这里选择DLL。附加选项   随意选,建议选择导出符号,会自动生成几个文件,并且会有小例子。或者选择空项目,在里面新建cpp  和 h文件然后再添加到项目。
2、添加Tcl库函数和包含文件
工具 -> 选项  -> VC++项目 
    平台: x64
    包含文件添加: D:\Tcl\include
    库文件添加:    D:\Tcl\lib                    根据自己的安装目录
3、解决方案平台配置
    生成  -> 配置管理器
    活动解决方案任意选,最终是要选择Release的
    活动解决方案平台:新建 -> 选择x64
4、配置项目属性
    项目 -> 属性 -> 配置属性
    C/C++下的  预编译头       选择 不使用预编译头。            不然会出现    *.pch”: No such file or directory
    
    C/C++下的  常规        附加包含目录中添加  D:\Tcl\include
    
    链接器下的   常规        附加库目录添加    D:\Tcl\lib
    
    链接器下的   输入        附加依赖项添加    tcl86.lib                解决error : 无法解析的外部符号 error LNK2019: 无法解析的外部符号
    

5、代码
在自己的cpp文件中
#include "stdafx.h"
#include "tcl.h"

static int Hello_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
    Tcl_SetObjResult(interp, Tcl_NewStringObj("Hello, World!", -1));
    return TCL_OK;
}

extern "C" __declspec(dllexport) int Hello_Init(Tcl_Interp *interp)
{
    if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL)
    {
	return TCL_ERROR;
    }
    //给定版本号
    if(Tcl_PkgProvide(interp, "hello", "1.0") == TCL_ERROR)
    {
        return TCL_ERROR;
    }
    Tcl_CreateObjCommand(interp, "hello", Hello_Cmd, NULL, NULL);
    return TCL_OK;
 }

在init 函数中必须添加extern "C" __declspec(dllexport)  ,不然编译通过也无法使用。
如果是新建的一个空项目,没有stdafx.h文件,要在此cpp文件中添加 #include <windows.h>

6、编译
   编译   +   启动调试     生成hello.dll

7、使用
将Release目录下的hello.dll拷贝到  tcl安装目录中的bin
启动 tcl 窗口
加载新生成的动态库    load  hello.dll
输入  hello  
输出  hello , World               编译tcl扩展库成功





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值