热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于msys2的tcl源码构建

我是从github下的tcl-core-9-0-a1版本,解压后进入源码目录,执行以下命令mkdirbldcdbld..unixconfigure

我是从github下的tcl-core-9-0-a1版本,解压后进入源码目录,执行以下命令

mkdir bld
cd bld
../unix/configure
make -j12

出现如下错误

/d/tcl-core-9-0-a1/generic/tclCmdAH.c:2151:63: 错误&#xff1a;‘Tcl_StatBuf’ {或称 ‘struct <匿名>}没有名为‘st_blocks’的成员2151 | STORE_ARY("blocks", Tcl_NewWideIntObj((Tcl_WideInt)statPtr->st_blocks));| ^~
/d/tcl-core-9-0-a1/generic/tclCmdAH.c:2132:14: 附注&#xff1a;in definition of macro ‘STORE_ARY’2132 | value &#61; (object); \| ^~~~~~
/d/tcl-core-9-0-a1/generic/tclCmdAH.c:2154:59: 错误&#xff1a;‘Tcl_StatBuf’ {或称 ‘struct <匿名>} has no member named ‘st_blksize’; did you mean ‘st_size’?2154 | STORE_ARY("blksize", Tcl_NewWideIntObj((long)statPtr->st_blksize));

打开tcl的314行&#xff0c;注释掉下面代码

/* #elif defined(__CYGWIN__)typedef struct {dev_t st_dev;unsigned short st_ino;unsigned short st_mode;short st_nlink;short st_uid;short st_gid;/* Here is a 2-byte gap */dev_t st_rdev;/* Here is a 4-byte gap */long long st_size;struct {long long tv_sec;} st_atim;struct {long long tv_sec;} st_mtim;struct {long long tv_sec;} st_ctim;} Tcl_StatBuf; */

接下来再编译&#xff0c;错误如下

gcc -O2 -pipe tclAppInit.o \-L/d/tcl-core-9-0-a1/bld -ltcl9.0 libtclstub9.0.a -lpthread \-o tclsh.exe
/usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: /d/tcl-core-9-0-a1/bld/libtcl9.0.a(tclPanic.o):tclPanic.c:(.text&#43;0x8c): undefined reference to &#96;tclWinDebugPanic&#39;
/d/tcl-core-9-0-a1/bld/libtcl9.0.a(tclPanic.o):tclPanic.c:(.text&#43;0x8c): relocation truncated to fit: R_X86_64_PC32 against undefined symbol &#96;
tclWinDebugPanic&#39;
/usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: /d/tcl-core-9-0-a1/bld/libtcl9.0.a(tclStubInit.o):tclStubInit.c:(.rdata&#43;0x1790): undefined reference to &#96;TclWinConvertError&#39;
/usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: /d/tcl-core-9-0-a1/bld/libtcl9.0.a(tclUnixFCmd.o):tclUnixFCmd.c:(.text&#43;0x3b7): undefined reference to &#96;
TclWinConvertError&#39;

/d/tcl-core-9-0-a1/bld/libtcl9.0.a(tclUnixFCmd.o):tclUnixFCmd.c:(.text&#43;0x3b7): relocation truncated to fit: R_X86_64_PC32 against undefined symbol &#96;TclWinConvertError&#39;
collect2: 错误&#xff1a;ld 返回 1
make: *** [Makefile:818&#xff1a;tclsh.exe] 错误 1

修改如下&#xff0c;首先在tclPanic.c的101行注释掉

// tclWinDebugPanic(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);

在tclStubInit.c的491行改为

#if 1//!defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */

在tclStubInit.c的524行改为

#if 0//defined(_WIN32) || defined(__CYGWIN__) /* WIN */

最后在tclUnixFCmd.c的2365行注释掉

// TclWinConvertError(GetLastError());

编译完后把tclsh.exe移到/usr/bin文件夹&#xff0c;把编译的libtcl8.7.a和libtclsub8.7.a还有源码目录的library下所有文件移到/mingw64/lib/tcl8.7

接着执行下列命令拷贝头文件

cp -i *.h /mingw64/include/tcl8.7

推荐阅读
author-avatar
霞慧水灵灵_973
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有