⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 porting.notes

📁 linux系统下的音频通信
💻 NOTES
字号:
This file contains a collection of notes that various people haveprovided about porting Tcl to various machines and operating systems.I don't have personal access to any of these machines, so I makeno guarantees that the notes are correct, complete, or up-to-date.If you see the word "I" in any explanations, it refers to the personwho contributed the information, not to me;  this means that Iprobably can't answer any questions about any of this stuff.  Insome cases, a person has volunteered to act as a contact point forquestions about porting Tcl to a particular machine;  in thesecases the person's name and e-mail address are listed.  I'minterested in getting new porting information to add to the file;please mail updates to "john.ousterhout@eng.sun.com".This file reflects information provided for Tcl 7.4 and later releases (8.x).If there is no information for your configuration in this file, checkthe file "porting.old" too;  it contains information that wassubmitted for Tcl 7.3 and earlier releases, and some of that informationmay still be valid.A new porting database has recently become available on the Web atthe following URL:    http://www.sunlabs.com/cgi-bin/tcl/info.8.0This page provides information about the platforms on which Tcl andand Tk 8.0 have been compiled and what changes were needed to get Tcland Tk to compile.  You can also add new entries to that databasewhen you install Tcl and Tk on a new platform.  The Web database islikely to be more up-to-date than this file.sccsid = SCCS: @(#) porting.notes 1.20 97/11/03 09:43:40--------------------------------------------Solaris, various versions--------------------------------------------1. If typing "make test" results in an error message saying thatthere are no "*.test" files, or you get lots of globbing errors,it's probably because your system doesn't have cc installed andyou used gcc.  In order for this to work, you have to set yourCC environment variable to gcc and your CPP environment variableto "gcc -E" before running the configure script.2. Make sure that /usr/ucb is not in your PATH or LD_LIBRARY_PATHenvironment variables;  this will cause confusion between the newSolaris libraries and older UCB versions (Tcl will expect one versionand get another).3. There have been several reports of problems with the "glob" command.So far these reports have all been for older versions of Tcl, butif you run into problems, edit the Makefile after "configure" isrun and add "-DNO_DIRENT_H=1" to the definitions of DEFS.  Do thisbefore compiling.--------------------------------------------SunOS 4 and potentially other OSes--------------------------------------------On systems where both getcwd(3) and getwd(3) exist, check the manpage and if getcwd, like on SunOS 4, uses popen to pwd(1)add -DUSEGETWD to the flags CFLAGS so getwd will be used instead.That is, change the CFLAGS = -O line so it reads CFLAGS = -O -DUSEGETWD--------------------------------------------Linux, ELF, various versions/distributions--------------------------------------------If ./configure --enable-shared complains it can not do a sharedlibrary you might have to make the following symbolic link:ln -s /lib/libdl.so.1 /lib/libdl.sothen remove config.cache and re run configure.--------------------------------------------Pyramid DC/OSx SVr4, DC/OSx version 94c079--------------------------------------------Tcl seems to dump core in cmdinfo.test when compiled with theoptimiser turned on in TclEval which calls 'free'.  To get aroundthis, turn the optimiser off.--------------------------------------------SGI machines, IRIX 5.2, 5.3, IRIX64 6.0.1--------------------------------------------1. If you compile with gcc-2.6.3 under some versions of IRIX (e.g.   4.0.5), DBL_MAX is defined too large for gcc and Tcl complains   about all floating-point values being too large to represent.   If this happens, redefining DBL_MAX to 9.99e299.2. Add "-D_BSD_TIME" to CFLAGS in Makefile.  This avoids type conflictsin the prototype for the gettimeofday procedure.2. If you're running under Irix 6.x and tclsh dumps core, tryremoving -O from the CFLAGS in Makefile and recompiling;  compileroptimizations seem to cause problems on some machines.--------------------------------------------IBM RTs, AOS--------------------------------------------1. Steal fmod from 4.4BSD2. Add a #define to tclExpr such that:extern double fmod(); is defined conditionally on ibm032--------------------------------------------QNX 4.22--------------------------------------------tclPort.h	- commented out 2 lines containing #include <sys/param.h>tcl.h	- changed  #define VARARGS ()	- to       #ifndef __QNX__	             #define VARARGS ()	           #else	             #define VARARGS (void *, ...)	           #endif--------------------------------------------Interactive UNIX--------------------------------------------Add the switch -Xp to LIBS in Makefile;  otherwise strftime will notbe found when linking.--------------------------------------------Motorola SVR4 V4.2 (m88k)--------------------------------------------For Motorola Unix R40V4.2 (m88k architechure), use /usr/ucb/cc instead of/usr/bin/cc.  Otherwise, the compile will fail because of conflicts overthe gettimeofday() call.Also, -DNO_DIRENT_H=1 is required for the "glob" command to work.--------------------------------------------NeXTSTEP 3.x--------------------------------------------Here's the set of changes I made to make 7.5b3 compile cleanly onNeXTSTEP3.x.Here are a couple lines from unix/Makefile:# Added utsname.o, which implements a uname() emulation for NeXTSTEP.COMPAT_OBJS =		 getcwd.o strtod.o tmpnam.o utsname.oTCL_NAMES=\	-Dstrtod=tcl_strtod -Dtmpnam=tcl_tmpnam -Dgetcwd=tcl_getcwd \	-Dpanic=tcl_panic -Dmatherr=tcl_matherr \	-Duname=tcl_uname -Dutsname=tcl_utsname# Added mode_t, pid_t, and O_NONBLOCK definitions.AC_FLAGS =		 -DNO_DIRENT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TIME_H=1  -DTIME_WITH_SYS_TIME=1 -DHAVE_TM_ZONE=1 -DHAVE_TM_GMTOFF=1 -DHAVE_TIMEZONE_VAR=1  -DSTDC_HEADERS=1 -Dmode_t=int -Dpid_t=int -DO_NONBLOCK=O_NDELAY ${TCL_NAMES}Here are diffs for other files.  utsname.[hc] are a couple files I addedto compat/  I'm not clear whether that's where they legitimately belong- I considered stashing them in tclLoadNext.c instead.  The tclIO.cchange was a bug, I believe, which I reported on comp.lang.tcl andhas apparently been noted and fixed.  The objc_loadModules() changeallows "load" to load object code containing Objective-C code inaddition to plain C code.---scott hess <shess@winternet.com> (WWW to "http://www.winternet.com/~shess/")Work: 12550 Portland Avenue South #121, Burnsville, MN  55337  (612)895-1208diff -rc tcl7.5b3.orig/compat/utsname.c tcl7.5b3/compat/utsname.c*** tcl7.5b3.orig/compat/utsname.c	Tue Apr  2 13:57:23 1996--- tcl7.5b3/compat/utsname.c	Mon Mar 18 11:05:54 1996****************** 0 ****--- 1,27 ----+ /*+  * utsname.c --+  *+  *	This file is an emulation of the POSIX uname() function+  *	under NeXTSTEP 3.x.+  *+  */+ + #include "utsname.h"+ #include <mach-o/arch.h>+ #include <stdio.h>+ + int uname( struct utsname *name)+ {+     const NXArchInfo *arch;+     if( gethostname( name->nodename, sizeof( name->nodename))==-1) {+ 	return -1;+     }+     if( (arch=NXGetLocalArchInfo())==NULL) {+ 	return -1;+     }+     strncpy( name->machine, arch->description, sizeof( name->machine));+     strcpy( name->sysname, "NEXTSTEP");+     strcpy( name->release, "0");+     strcpy( name->version, "3");+     return 0;+ }diff -rc tcl7.5b3.orig/compat/utsname.h tcl7.5b3/compat/utsname.h*** tcl7.5b3.orig/compat/utsname.h	Tue Apr  2 13:57:26 1996--- tcl7.5b3/compat/utsname.h	Mon Mar 18 10:34:05 1996****************** 0 ****--- 1,22 ----+ /*+  * utsname.h --+  *+  *	This file is an emulation of the POSIX uname() function+  *	under NeXTSTEP.+  *+  */+ + #ifndef _UTSNAME+ #define _UTSNAME+ + struct utsname {+     char sysname[ 32];+     char nodename[ 32];+     char release[ 32];+     char version[ 32];+     char machine[ 32];+ };+ + extern int uname( struct utsname *name);+ + #endif /* _UTSNAME */diff -rc tcl7.5b3.orig/generic/tclIO.c tcl7.5b3/generic/tclIO.c*** tcl7.5b3.orig/generic/tclIO.c	Fri Mar  8 12:59:53 1996--- tcl7.5b3/generic/tclIO.c	Mon Mar 18 11:38:57 1996****************** 2542,2548 ****              }              result = GetInput(chanPtr);              if (result != 0) {!                 if (result == EWOULDBLOCK) {                      chanPtr->flags |= CHANNEL_BLOCKED;                      return copied;                  }--- 2542,2548 ----              }              result = GetInput(chanPtr);              if (result != 0) {!                 if (result == EAGAIN) {                      chanPtr->flags |= CHANNEL_BLOCKED;                      return copied;                  }diff -rc tcl7.5b3.orig/unix/tclLoadNext.c tcl7.5b3/unix/tclLoadNext.c*** tcl7.5b3.orig/unix/tclLoadNext.c	Sat Feb 17 16:16:42 1996--- tcl7.5b3/unix/tclLoadNext.c	Mon Mar 18 10:02:36 1996****************** 55,61 ****    char *files[]={fileName,NULL};    NXStream *errorStream=NXOpenMemory(0,0,NX_READWRITE);  !   if(!rld_load(errorStream,&header,files,NULL)) {      NXGetMemoryBuffer(errorStream,&data,&len,&maxlen);      Tcl_AppendResult(interp,"couldn't load file \"",fileName,"\": ",data,NULL);      NXCloseMemory(errorStream,NX_FREEBUFFER);--- 55,61 ----    char *files[]={fileName,NULL};    NXStream *errorStream=NXOpenMemory(0,0,NX_READWRITE);  !   if(objc_loadModules(files,errorStream,NULL,&header,NULL)) {      NXGetMemoryBuffer(errorStream,&data,&len,&maxlen);      Tcl_AppendResult(interp,"couldn't load file \"",fileName,"\": ",data,NULL);      NXCloseMemory(errorStream,NX_FREEBUFFER);diff -rc tcl7.5b3.orig/unix/tclUnixFile.c tcl7.5b3/unix/tclUnixFile.c*** tcl7.5b3.orig/unix/tclUnixFile.c	Thu Mar  7 18:16:34 1996--- tcl7.5b3/unix/tclUnixFile.c	Mon Mar 18 11:10:03 1996****************** 31,37 ****--- 31,41 ----    static int executableNameExitHandlerSet = 0;  + #if NeXT+ #define waitpid( p, s, o) wait4( p, s, o, NULL)+ #else  extern pid_t waitpid _ANSI_ARGS_((pid_t pid, int *stat_loc, int options));+ #endif    /*   * Static routines for this file:diff -rc tcl7.5b3.orig/unix/tclUnixInit.c tcl7.5b3/unix/tclUnixInit.c*** tcl7.5b3.orig/unix/tclUnixInit.c	Sat Feb 17 16:16:39 1996--- tcl7.5b3/unix/tclUnixInit.c	Mon Mar 18 11:50:28 1996****************** 14,20 ****  #include "tclInt.h"  #include "tclPort.h"  #ifndef NO_UNAME! #   include <sys/utsname.h>  #endif  #if defined(__FreeBSD__)  #include <floatingpoint.h>--- 14,24 ----  #include "tclInt.h"  #include "tclPort.h"  #ifndef NO_UNAME! #    if NeXT! #        include "../compat/utsname.h"! #    else! #        include <sys/utsname.h>! #    endif  #endif  #if defined(__FreeBSD__)  #include <floatingpoint.h>diff -rc tcl7.5b3.orig/unix/tclUnixPort.h tcl7.5b3/unix/tclUnixPort.h*** tcl7.5b3.orig/unix/tclUnixPort.h	Thu Mar  7 18:16:31 1996--- tcl7.5b3/unix/tclUnixPort.h	Mon Mar 18 11:53:14 1996****************** 76,82 ****   */    #include <sys/socket.h>		/* struct sockaddr, SOCK_STREAM, ... */! #include <sys/utsname.h>	/* uname system call. */  #include <netinet/in.h>		/* struct in_addr, struct sockaddr_in */  #include <arpa/inet.h>		/* inet_ntoa() */  #include <netdb.h>		/* gethostbyname() */--- 76,88 ----   */    #include <sys/socket.h>		/* struct sockaddr, SOCK_STREAM, ... */! #ifndef NO_UNAME! #    if NeXT! #        include "../compat/utsname.h"! #    else! #        include <sys/utsname.h>	/* uname system call. */! #    endif! #endif  #include <netinet/in.h>		/* struct in_addr, struct sockaddr_in */  #include <arpa/inet.h>		/* inet_ntoa() */  #include <netdb.h>		/* gethostbyname() */--------------------------------------------SCO Unix 3.2.4 (ODT 3.0)-------------------------------------------- The macro va_start in /usr/include/stdarg.h is incorrectly terminated bya semi-colon.  This causes compile of generic/tclBasic.c to fail.  Thebest solution is to edit the definition of va_start to remove the `;'.This will fix this file for anything you want to compile.  If you don't havepermission to edit /usr/include/stdarg.h in place, copy it to the tcl unixdirectory and change it there. Contact me directly if you have problems on SCO systems.Mark Diekhans <markd@grizzly.com> --------------------------------------------SCO Unix 3.2.5 (ODT 5.0)--------------------------------------------Expect failures from socket tests 2.9 and 3.1.Contact me directly if you have problems on SCO systems.Mark Diekhans <markd@grizzly.com> --------------------------------------------Linux 1.2.13 (gcc 2.7.0, libc.so.5.0.9)--------------------------------------------Symptoms:*	Some extensions could not be loaded dynamically, most	prominently Blt 2.0	The given error message essentially said:	Could not resolve symbol '__eprintf'.	(This procedure is used by the macro 'assert')Cause*	'__eprintf' is defined in 'libgcc.a', not 'libc.so.x.y'.	It is therefore impossible to load it dynamically.*	Neither tcl nor tk make use of 'assert', thereby	preventing a static linkage.Workaround*	I included <assert.h> in 'tclAppInit.c' / 'tkAppInit.c'	and then executed 'assert (argc)' just before the call	to Tcl_Main / Tk_Main.	This forced the static linkage of '__eprintf' and	everything went fine from then on.	(Something like 'assert (1)', 'assert (a==a)' is not	sufficient, it will be optimized away).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -