2014-02-12 64 views
0

我的应用程序在solaris9环境中有内存相关的问题,其中Tcl_DeleteInterp()函数调用很多free()mutex_unlock()函数。为了调试问题,我按照以下步骤在solaris服务器上编译tcl(使用TCL_MEM_DEBUG标志),但仍然无法在解释器中使用'memory'命令。在服务器上(./configure –prefix=<directory needs to be installed> --enable-symbols=mem即使使用TCL_MEM_DEBUG编译后内存命令也不可用

    1. 冉配置脚本使清洁所有
    2. 制作安装(TCL库和tlcsh exe文件被复制到在步骤1中指定的路径)
    3. 编译生成两个库(libtcl8。 4g.so和libtclstub8.4g.a),我将libtcl8.4g.so作为libtcl8.4.so复制到我的应用程序
    4. 复制了tcl8.4目录。
    5. 我还将tclsh8.4复制到$ PROVHOME/bin并创建软链接为tclsh-> tclsh8.4。
    6. 从我的应用程序中,我将启用调试符号的库链接到我创建Tcl解释器的地方。
    7. 初始化Tcl解释使用Tcl_InitMemory()函数(以使得存储器命令将在所提供的(ARG)解释器进行注册。

    当我用解释器的exe(tclsh的)分别我可以执行所述存储器命令,但是当我在我的应用程序上使用相同的exe文件时,它不工作。有人可以帮我解决这个问题的可能原因吗? 也帮助我如何交叉验证它们是用TCL_MEM_DEBUG标记编译的库 Will Tcl源代码tar文件包含Solaris目录,在那里我必须构建这些库或者我应该使用solaris平台的unix源代码?

    感谢

  • 回答

    0

    是否使用[存储]交互(它明确的短命令名称的扩张)和遗忘在脚本中使用的全名([内存])?

    +0

    我用它作为[内存活动],这是不被识别。 – sakthivp

    0

    你正在代码中使用Tcl嵌入?你需要在创建解释器之后,在你运行用户脚本之前,即在Tcl_CreateInterp给出句柄之后直接调用Tcl_InitMemory(在你想要创建memory命令的地方传入解释器的句柄)调用初始化库的共享部分的Tcl_FindExecutable)。

    必须也确保一切都建有该标志设置,以便正确的内存分配的API在这两个代码中使用时,它与Tcl的整合,你必须确保你链接的调试建立。这可能是错误的链接,但是我多年来没有在Solaris上做过这样的开发。

    我想你会发现“Getting a list of used libraries by a running process (unix)”与你的问题有关。

    相关问题