我正在尝试通过Ubuntu控制台执行TCL脚本,
在控制台中执行示例测试脚本
tcl Main.tcl -file xxxx -test xxxx | tee test.log
在没有执行我的脚本最大大小超出Tcl值(2147483647字节)的情况下抛出错误消息
我的机器TCL版本
% puts $tcl_version
8.6
我的机器TCL平台
% parray tcl_platform
tcl_platform(byteOrder) = littleEndian
tcl_platform(machine) = x86_64
tcl_platform(os) = Linux
tcl_platform(osVersion) = 3.13.0-32-generic
tcl_platform(pathSeparator) = :
tcl_platform(platform) = unix
tcl_platform(pointerSize) = 8
tcl_platform(threaded) = 1
tcl_platform(user) = vkosuri
tcl_platform(wordSize) = 8
但它与其他Ubuntu机器运行良好,没有给出任何错误消息
其他计算机TCL版
% puts $tcl_version
8.4
其他机器TCL平台
% parray tcl_platform
tcl_platform(byteOrder) = littleEndian
tcl_platform(machine) = x86_64
tcl_platform(os) = Linux
tcl_platform(osVersion) = 2.6.28-19-generic
tcl_platform(platform) = unix
tcl_platform(threaded) = 1
tcl_platform(user) = vkosuri
tcl_platform(wordSize) = 8
有人可以解释我的机器出了什么问题。
由于
Malli
答案 0 :(得分:2)
这看起来很像你可能会对可以一块分配的内存块大小施加限制。 64位平台上的2GB限制是long-standing bug(分配给我!),无法完全破坏ABI而无法修复,这就是为什么它尚未修复的原因。当你达到极限时,Tcl失败了。它并不总是灾难性地失败 - 这部分取决于它在问题被发现时在C级恢复的背景 - 但它肯定可以直接过去。
由于这是一个已知问题,因此您最好的选择是找到解决方法。你能一次处理一下你的数据而不是一块大块的数据吗? (当然,我们需要查看更多代码来提出具体建议。)
答案 1 :(得分:0)
问题是Ubuntu http://www.freetds.org/
上的freeTDS包查询在freeTDS == 0.63下运行良好,但我的Ubuntu有freeTDS 0.93,现在我将freeTDS 0.93降级到0.63,它运行正常。
freeTds 0.63来源
ftp://ftp.freetds.org/pub/freetds/old/0.63/freetds-0.63.tar.gz
在我的Ubuntu Box上设置SQL Server连接
必需的库/程序
tclodbc >= v2.5.1 unixODBC >= v2.2.11 freeTDS == 0.63
<强>配置强>
编辑/etc/odbcinst.ini并包含以下部分:
描述= SQL Server 2005
驱动程序驱动程序= /usr/lib/odbc/libtdsodbc.so
将libtdsodbc.so复制到/ usr / lib / odbc /
我已将libtdsodbc.so放入我的Google云端硬盘中,您可以下载
https://drive.google.com/open?id=0B_cUPwVRE2oUXzIzX0NNSG1VZ1E&authuser=0
希望它能奏效。
由于
Malli