OSX: GLUT窗口永远不会出现

OSX: GLUT window never appears

本文关键字:永远 GLUT 窗口 OSX      更新时间:2023-10-16

我想在我的Mac上运行一个学校项目。它表面上是为跨平台而编写的,但我不知道它是否在OSX上进行了适当的测试。经过很大的困难,我设法使它可以编译,但它仍然不能很好地工作。

当我运行ortsg应用程序时,这是OpenGL图形界面,终端输出表明游戏启动,加载其资产并正确运行。然而,真正的游戏窗口永远不会出现。任何问题的唯一可能指示是以下消息:

2011-11-23 16:52:33.513 ortsg[4565:107] GLUT警告:第二次调用glutInit。

除了这个消息,所有的输出都和我在学校的Slackware Linux机器上看到的完全一样,在那里游戏运行得很好。(不幸的是,在这些机器上工作对我来说相当不方便,因此我尝试在OSX上运行它。)我可以通过在apps/ortsg/src/ortsg_main.C中注释对glutInit的调用来摆脱该警告,这似乎没有引入任何其他问题,但游戏窗口仍然从未显示。

我在Google上似乎找不到任何人有类似问题的报告。我不希望SO上的任何人对ports非常熟悉,所以我的问题如下:

  1. 是否有任何常见的情况可能导致GLUT窗口不出现,特别是在OSX上?
  2. GLUT是否提供了调试此类问题的工具?

编辑:根据JimN的要求,这里是一些GLUT初始化代码…

// From apps/ortsg/src/ortsg_main.C
int main(int argc, char **argv)
{
  char mydir[81];
  getcwd(mydir, 80);
  glutInit(&argc, argv);
  chdir(mydir);
  // ...
}
// From libs/gfxclient/src/GfxInit.C
void glutVisibilityDebug(int state)
{
  if(state == GLUT_VISIBLE)
    cout << "Window is visible" << endl;
  else if(state == GLUT_NOT_VISIBLE)
    cout << "Window is invisible" << endl;
  else
    cout << "Window state unknown";
}
void GfxModule::init_GLUT_window()
{
  cerr << "INITIALIZE GLUT WINDOW" << endl;
  GfxGlutAdaptor::set_client(this);
  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA);
  // the window starts near the upper left corner of the screen
  glutInitWindowPosition(opt.win_x, opt.win_y);
  glutInitWindowSize(opt.win_w, opt.win_h);
  // Open a window
  glutCreateWindow(opt.title.c_str());
  // Register the splash as the draw routing until
  glutDisplayFunc   (GfxGlutAdaptor::splash);
  glutVisibilityFunc(glutVisibilityDebug);
  if (opt.full_screen) glutFullScreen();
}

我添加了glutVisibilityDebug函数,看看我是否可以确定GLUT认为窗口的可见性状态是什么,但是我的调试语句都没有打印出来。其他事情刚刚发生在我这可能有助于调试这个。我曾经尝试用一个函数来代替glutDisplayFunc,这个函数只是打印"glutdisplayplayfunc调用"到stderr。我注意到只有当我退出应用程序时才会打印文本

我从26/11/2011下载了每日快照,然后在我的Mac上使用brew安装了所有依赖项。

执行export OSTYPE=DARWIN后接make initmake。有几个编译问题,我修复了这个makefile:

# $Id: makefile 10648 2011-10-06 15:46:07Z mburo $
#  
# This is an ORTS file (c) Michael Buro, licensed under the GPL
# This make file works for systems which use gcc
#
# - shell variable OSTYPE must be set in your shell rc file as follows:
# 
#   if LINUX matches uppercase($OSTYPE) => Linux
#   if DARWIN matches                   => Mac OS X
#   if CYGWIN matches                   => Cygwin (gcc on Windows)
#   if MSYS   matches                   => MinGW (gcc on Windows)
#
#   check that value with echo $OSTYPE and set it in your shell resource
#   file if above words don't match. Don't forget export OSTYPE when using sh or bash
#
#   I use:  OSTYPE=`uname`
#
# - ORTS_MTUNE = i686 athlon-xp pentium-m etc.
#     if set, -mtune=$(ORTS_MTUNE) is added to compiler options
#
# - set GCC_PRECOMP to 1 if you want to use precompiled header files (gcc >= 3.4)
#
# - adjust SDL/X paths if necessary
#
# - for non-gcc compilers try -DHAS_TYPEOF=0 if typeof causes trouble
#
# - make MDBG=1 ...    displays the entire compiler/linker invocation lines
#
# - make clean         removes make generated files
# - make cleanobj      removes all .o files
#
# - make [MODE=dbg]    compiles targets in debug mode (no STL debug!)
#
# - make MODE=opt      compiles with optimizations
#
# - make MODE=bp       compiles with bprof info
#
# - make MODE=gprof    compiles with gprof info
#
# - make MODE=stldbg   compiles optimized stl debug version
#
# - make <app>         creates application bin/<app>  (omit prefix bin/ !)
#                      use periods in <app> in place of slashes for applications
#                      within subdirectories (e.g. "make rtscomp06.game2.simtest")
#
# - make list          displays a list of all registered applications
#
# - make init          creates necessary dep+bin+obj directories and links
#
# - make               creates all applications
#
# - shell variable ORTS_MODE defines the default compile mode
#   if not set, the passed MODE= parameter or dbg will be used, if MODE is not passed
#   otherwise ORTS_MODE will be used
#
# issues: 
#
#  - all include files are used (only using library includes would be better)
#
# new:
#
# applications and libraries can now name their individual external library dependencies
# (libs + headers)     
# see: apps/*/src/app.mk and libs/*/src/lib.mk, esp. libs/gfxclient/src/lib.mk
#
# todo: adjust mac/cygwin to new libary setting

# supported substrings of OSTYPE
# The following words must be uppercase
# If they are found in the uppercased OSTYPE variable
# the particular O/S matches
OSTYPE_LINUX  := LINUX
OSTYPE_MAC    := DARWIN
OSTYPE_CYGWIN := CYGWIN
OSTYPE_MINGW  := MSYS
# convert OSTYPE to uppercase
OSTYPE := $(shell echo -n "$(OSTYPE)" | tr a-z A-Z )
#$(warning OSTYPE=$(OSTYPE))
#OSTYPE := LINUX
# -DOS_LINUX or -DOS_MAC or -DOS_CYGWIN is passed to g++
# also set: OS_LINUX, OS_CYGWIN, OS_MAC := 1 resp.
# MinGW uses OS_LINUX for now.
# tar file name
PROJ := orts
# directories to be excluded from snapshot tar file
# no longer needed SNAPSHOT_EXCLUDE := libs/mapabstr apps/mapabs apps/polypath apps/hpastar
# special targets
EXCL_INC := clean init cleanobj tar dep rmdeps list tar snapshot rpm
# libraries
#LIB_DIRS := kernel network serverclient gfxclient pathfind osl mapabstr path ortsnet ai/low dcdt/se dcdt/sr newpath
#LIB_DIRS := $(wildcard libs/*) libs/dcdt/se libs/dcdt/sr libs/ai/low
LIB_DIRS := $(wildcard libs/*/src) $(wildcard libs/*/*/src)
#$(warning LIBS $(LIB_DIRS))
# sub-projects
ifeq ("$(MAKECMDGOALS)","")
APP_DIRS := orts ortsg#  built by default (do not edit)
else
APP_DIRS := $(MAKECMDGOALS)# build the passed on application
endif
FILT := $(filter $(EXCL_INC),$(MAKECMDGOALS))
ifneq ("$(FILT)","")
APP_DIRS := 
endif
#MAKECMDGOALS := compile_gch link_gch $(MAKECMDGOALS)
#$(warning making $(MAKECMDGOALS) ...)
# $(warning making $(APP_DIRS) ...)
.PHONY: all ALWAYS $(EXCL_INC) $(APP_DIRS) init
# where dependencies are stored (change also in dependency command (***) below)
#
DEP := dep
#$(error $(vp))
# make libraries and applications, make and link gch file first
all: all_end
# create tar file of the entire project
tar:
    @ $(MAKE) clean; cd ..; tar cfz ../$(PROJ).tgz $(PROJ)

# daily SVN snapshot
SVNROOT=svn://mburo@bodo1.cs.ualberta.ca:/all/pubsoft
snapshot:
    rm -rf orts
    mkdir orts
    svn export $(SVNROOT)/orts/trunk orts/trunk
    tar cfz $(PROJ).tgz orts
    rm -rf orts
    rm -rf orts_data
    mkdir orts_data
    svn export $(SVNROOT)/orts_data/trunk orts_data/trunk
    tar cfz orts_data.tgz orts_data
    rm -rf orts_data
CC        := g++
CC_OPTS   := -pipe -felide-constructors -fstrict-aliasing -Wno-deprecated
# -fno-merge-constants
#WARN      := -Wall -W -Wundef 
WARN      := -Wall -W 
#-Wold-style-cast
#ifneq ("$(OSTYPE)", "$(OSTYPE_MINGW)") 
ifeq (,$(findstring $(OSTYPE_MINGW),$(OSTYPE)))
WARN += -Wundef 
endif 
OPT:=-O3
ifneq ("$(ORTS_MTUNE)","") 
  OPT:=$(OPT) -mtune=$(ORTS_MTUNE)
endif
OPT_FRAME := -fomit-frame-pointer 
# default 
AWK := gawk
EXE_SUFFIX :=
#ifeq ("$(OSTYPE)", "$(OSTYPE_MAC)") 
ifneq (,$(findstring $(OSTYPE_MAC),$(OSTYPE)))
################### Mac OS X 
OS_MAC := 1
MACROS    := -DGCC -DOS_MAC -DHAS_TYPEOF=1 -DTRANSFORM_MOUSE_Y=0 -DMAC_OS_X_VERSION_MIN_REQUIRED=1040 -DTARGET_API_MAC_CARBON=1
USR_FRAME := /Library/Frameworks
SYS_FRAME := /System/Library/Frameworks
INC_OPTS += -I/usr/local/Cellar/sdl/1.2.14/include/SDL 
            -I/usr/local/Cellar/sdl_net/1.2.7/include/SDL 
            -I/usr/local/Cellar/glew/1.7.0/include/GL 
            -I/usr/include/GL 
            -L$(USR_FRAME) -L$(SYS_FRAME) -L/usr/local/Cellar/sdl/1.2.14/lib -L/usr/local/Cellar/sdl_net/1.2.7/lib -L/usr/local/lib
SHARED_LIBS0 := -lc -lz  -lpthread 
               -lSDL 
               -lSDL_net 
               -lSDLmain 
               -framework Foundation 
               -framework AppKit
AWK := awk
#WARN += -Wno-long-double
ifeq ("$(CPU)", "G5")
OPT += -mcpu=970 -mpowerpc64
endif
else
################### MinGW
#ifeq ("$(OSTYPE)", "$(OSTYPE_MINGW)")
ifneq (,$(findstring $(OSTYPE_MINGW),$(OSTYPE)))
OS_LINUX := 1
MACROS   := -DOS_LINUX -DGCC -D_WIN32=1 -DTRANSFORM_MOUSE_Y=1 -DHAS_TYPEOF=1
MACROS   += -DGLUT_NO_LIB_PRAGMA -DGLUT_NO_WARNING_DISABLE
INC_OPTS += -I/mingw/include/GL -I/local/include 
SHARED_LIBS0  := -lm -lzlib1 -lmingw32 -lSDLmain -lSDL -lSDL_net -lpthreadGC2 -lstdc++
else
################### Linux | Cygwin
MACROS   := -DGCC -DTRANSFORM_MOUSE_Y=1 -DHAS_TYPEOF=1
INC_OPTS += -I$(HOME)/include -I$(HOME)/include/GL -I/usr/include -I/usr/include/SDL -I/usr/local/include/SDL -I$(HOME)/usr/local/include/GL
# -I/home/dsk06/cscrs/c399/c399-software/include
#ifeq ("$(OSTYPE)", "$(OSTYPE_LINUX)")
ifneq (,$(findstring $(OSTYPE_LINUX),$(OSTYPE)))
################### Linux 
OS_LINUX := 1
MACROS += -DOS_LINUX
#SHARED_LIBS0  += -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib -lm -lz -lSDLmain -lSDL -lSDL_net -lpthread -lGL -lGLU -lXi -lXmu -lglut -lGLEW $(MODEL_LIBS) -lstdc++
#SHARED_LIBS0  += -L$(HOME)/lib -lm -lz -lSDLmain -lSDL -lSDL_net -lpthread -lstdc++
SHARED_LIBS0  += -L$(HOME)/lib -lm -lz -lSDL -lSDL_net -lpthread -lstdc++
# -lefence
else 
#ifeq ("$(OSTYPE)", "$(OSTYPE_CYGWIN)")
ifneq (,$(findstring $(OSTYPE_CYGWIN),$(OSTYPE)))
################## Cygwin
OS_CYGWIN := 1
EXE_SUFFIX:=.exe
MACROS += -DOS_CYGWIN -DSTDC_HEADERS=1 -DGLUT_IS_PRESENT=1 
#-mno-cygwin
#INC_OPTS += -I/usr/include/mingw   -I/usr/include/mingw/GL -I/usr/include
#$(warning "INC_OPTS=" $(INC_OPTS))
# fixme: /lib/SDL_main.o -> -lSDLmain (didn't get SDL to compile on Cygwin)
# adjust paths if necessary
SHARED_LIBS0 := -lSDL -lSDL_net -lpthread  -lz -lstdc++ 
# GLEW not checked under cygwin!
else 
# unknown OSTYPE
$(error "!!!!! unknown OSTYPE=$(OSTYPE) !!!!")
endif
endif
endif
endif

# default mode; if ORTS_MODE set, use it
# otherwise use MODE if passed, or dbg otherwise
ifeq ("$(ORTS_MODE)", "") 
  MODE := dbg
else
  MODE := $(ORTS_MODE)
endif
OBJ_DIR := obj
CONFIG  := config
SHARED_PROF_LIBS := $(SHARED_LIBS0)
SHARED_BP_LIBS := ~/lib/bmon.o $(SHARED_LIBS0)
OBJ_OPT := $(OBJ_DIR)/opt
OBJ_DBG := $(OBJ_DIR)/dbg
OBJ_SDBG := $(OBJ_DIR)/stldbg
OBJ_PROF:= $(OBJ_DIR)/prof
OBJ_BP  := $(OBJ_DIR)/bp
OFLAGS  := $(WARN) $(OPT) $(OPT_FRAME) # !!! -g added for 2007 competition
DFLAGS  := $(WARN) -g -ggdb # -ftrapv
SDFLAGS := $(WARN) -g -ggdb -O -D_GLIBCXX_DEBUG # STL debug mode is SLOW!
PFLAGS  := $(WARN) $(OPT) -pg -O
BPFLAGS := $(WARN) -g -ggdb -O2
ifeq ("$(MODE)", "opt")
  FLAGS := $(OFLAGS) -DNDEBUG -Wuninitialized 
#-DSCRIPT_DEBUG
  STRIP := strip
  OBJ   := $(OBJ_OPT)
  SHARED_LIBS := $(SHARED_LIBS0)
else 
  ifeq ("$(MODE)", "gprof")
  FLAGS := $(PFLAGS) -DNDEBUG -Wuninitialized
  STRIP := echo
  OBJ   := $(OBJ_PROF)
  SHARED_LIBS := $(SHARED_PROF_LIBS)
else 
  ifeq ("$(MODE)", "bp")
  FLAGS := $(BPFLAGS) -DNDEBUG -Wuninitialized
  STRIP := echo
  OBJ   := $(OBJ_BP)
  SHARED_LIBS := $(SHARED_BP_LIBS)
else 
  ifeq ("$(MODE)", "dbg")
  FLAGS := $(DFLAGS) 
  STRIP := echo
  OBJ   := $(OBJ_DBG)
  SHARED_LIBS := $(SHARED_LIBS0)
else
  ifeq ("$(MODE)", "stldbg")
  FLAGS := $(SDFLAGS) 
  STRIP := echo
  OBJ   := $(OBJ_SDBG)
  SHARED_LIBS := $(SHARED_LIBS0)
else 
# unknown MODE
$(error "!!!!! unknown MODE=$(MODE) !!!!")
endif
endif
endif
endif
endif
CCOPTS  = $(CC_OPTS) $(MACROS) $(FLAGS) $(INC_OPTS) -DBOOST_STRICT_CONFIG
# -m32  for 32-bit applications
LD      := $(CC) $(CCOPTS) 
LDOPTS  := $(FLAGS)

# line prefix
ifeq ("$(MDBG)", "") 
VERBOSE=@
else
VERBOSE=
endif
# how to generate precompiled header file if GCC_PRECOMP=1
# otherwise, create dummy file
ALLH       := All.H
ALLGCH     := $(ALLH).gch
ALLGCHMODE := $(ALLGCH).$(MODE)
ifeq ("$(GCC_PRECOMP)", "1")
$(CONFIG)/$(ALLGCHMODE) : $(CONFIG)/$(ALLH)
    @ rm -rf  $(CONFIG)/$(ALLGCH)
    @ echo "compile gch file"
    $(VERBOSE) $(CC) $(CCOPTS) -c -o xxx1 $<
    @ mv xxx1 $@
    @ echo "link gch file"
    $(VERBOSE) cd $(CONFIG); ln -sf $(ALLGCHMODE) $(ALLGCH)
else
$(CONFIG)/$(ALLGCHMODE) : $(CONFIG)/$(ALLH)
    @ echo "DUMMY GCH FILE"
    $(VERBOSE) touch $@
endif

# link gch file to gchmode file
# depends on compiled header file
ifeq ("$(GCC_PRECOMP)", "1")
link_gch: 
    @ echo "link gch file"
    $(VERBOSE) cd $(CONFIG); ln -sf $(ALLGCHMODE) $(ALLGCH)
else
link_gch:
    @ echo "remove gch file"
    @ cd config ; rm -f $(ALLGCHMODE) $(ALLGCH)
endif
#===================================================================
# how to create dependency files
# add depfile (.d) as dependent file
# (***) (can't use $(DEP) in sed command because it contains / - so if DEP changes edit this line!
# also prepend object path for .o file
#
DEP_EXEC = $(VERBOSE) set -e; $(CC) -MM $(CCOPTS) $(INC_OPTS) $< | sed 's/$*.o[ :]*/$(subst /,.,$(basename $<)).o dep/$(@F) : /g' | $(AWK) '{ if (index($$1,".o") > 0) { print "$$(OBJ)/" $$0 ; } else { print $$0; } }' > $@; [ -s $@ ] || rm -f $@OB
# how to compile source files
#
COMP_EXEC = $(VERBOSE) $(CC) $(CCOPTS) -c -o $@ `pwd`/$<
#-------------------------------------
define create_sublib_rules2
$$(OBJ)/libs.$(subst /,.,$1).src.%.o : libs/$1/src/%.$2
    @ echo "comp($$(MODE)):" $$<
    $$(COMP_EXEC)
$$(DEP)/libs.$(subst /,.,$1).src.%.d : libs/$1/src/%.$2
    @ echo dep: $$<
    $$(DEP_EXEC)
endef
define create_sublib_rules
$(foreach ext,C c cpp m,$(eval $(call create_sublib_rules2,$1,$(ext))))
endef
#-------------------------------------
define create_subapp_rules2
$$(OBJ)/apps.$1.src.%.o : apps/$(subst .,/,$1)/src/%.$2
    @ echo "comp($$(MODE)):" $$<
    $$(COMP_EXEC)
$$(DEP)/apps.$1.src.%.d : apps/$(subst .,/,$1)/src/%.$2
    @ echo dep: $$<
    $$(DEP_EXEC)
endef
define create_subapp_rules
$(foreach ext,C c cpp,$(eval $(call create_subapp_rules2,$1,$(ext))))
endef
#===================================================================
# collect all source files, replace suffix by .o, and filter out *_main.o
# input:  FILES
# output: O_FILES
define create_O_FILES
#FILES     := $$(notdir $$(FILES))
C_FILES   := $$(filter %.C, $$(FILES))
c_FILES   := $$(filter %.c, $$(FILES))
cpp_FILES := $$(filter %.cpp, $$(FILES))
m_FILES   := 
ifeq ("$(OSTYPE)","$(OSTYPE_MAC)")
#ifneq (,$(findstring $(OSTYPE_MAC),$(OSTYPE)))
m_FILES   := $$(filter %.m, $$(FILES))
endif
O_FILES   := $$(C_FILES:.C=.o) $$(c_FILES:.c=.o) $$(cpp_FILES:.cpp=.o) $$(m_FILES:.m=.o)
O_FILES   := $$(subst /,.,$$(O_FILES))
O_FILES := $$(filter-out %_main.o, $$(O_FILES))
endef

# include all applications and dependencies (uses SHARED_LIBS for linking)
APP_SDIRS := $(subst .,/,$(APP_DIRS))
ifneq ("$(APP_DIRS)","")
#include $(patsubst %, apps/%/src/app.mk, $(APP_DIRS))
include $(patsubst %, apps/%/src/app.mk, $(APP_SDIRS))
endif
#$(warning lib_dirs="$(LIB_DIRS)")
vp := $(patsubst %, apps/%/src, $(APP_SDIRS)) 
      $(patsubst %, libs/%/src, $(APP_LIBS)) 
#     $(LIB_DIRS)
#vp := $(patsubst %, %/src, $(LIB_DIRS)) 
#      $(patsubst %, apps/%/src, $(APP_DIRS)) 
INC_OPTS += -Iconfig $(addprefix -I, $(vp))
# new
INC_OPTS += $(LIB_EXT_HD) $(APP_EXT_HD)
# $(warning INC_OPTS= $(INC_OPTS))
# where source files are searched
#$(warning vp="$(vp)")
vpath %.C   $(vp)
vpath %.c   $(vp)
vpath %.cpp $(vp)
vpath %.m   $(vp)
all_end: link_gch $(APP_DIRS)
cleanobj:
    rm -f $(OBJ_OPT)/*
    rm -f $(OBJ_DBG)/*
    rm -f $(OBJ_SDBG)/*
    rm -f $(OBJ_PROF)/*
    rm -f $(OBJ_BP)/*
clean:
    ( rm -f bin/*; exit 0)
    rm -f $(DEP)/*
    rm -f $(OBJ_OPT)/*
    rm -f $(OBJ_DBG)/*
    rm -f $(OBJ_SDBG)/*
    rm -f $(OBJ_PROF)/*
    rm -f $(OBJ_BP)/*
    rm -f $(CONFIG)/*.gch*
    rm -rf misc/doxygen/html
    find . -name "*.bprof" -exec rm -f '{}' ;
    find . -name ".ui" -exec rm -f '{}'/* ;
    find . -name ".moc" -exec rm -f '{}'/* ;
rmdeps:
    @ rm -f $(DEP)/
rpm:
    cd misc/pkgs/fc7; ./makerpm; cd ../../..
# create dependency, object directories
# doesn't touch links (pointing to fast local partitions)
 
init:
    @ echo "create directories"
    @ config/create_dir bin
    @ config/create_dir $(DEP)
    @ config/create_dir $(OBJ_DIR)
    @ config/create_dir $(OBJ_OPT)
    @ config/create_dir $(OBJ_DBG)
    @ config/create_dir $(OBJ_SDBG)
    @ config/create_dir $(OBJ_PROF)
    @ config/create_dir $(OBJ_BP)
#   @ ln -s ../../orts_data/trunk orts_data
    @ (cd libs/pathfinding/dcdt; ./makelinks; exit 0) > /dev/null 2>&1

然后我必须手动做一些更改,以修复如下错误:

sr_bv_math.cpp:561: error: ‘isnan’ was not declared in this scope
编辑trunk/libs/pathfinding/dcdt/sr/src/sr_bv_math.cpp文件,在cmath include后面,声明isnanextern:
#include <cmath>
extern "C" int isnan(double);

编译了二进制文件,但是我还必须下载orts_data.tgz来运行应用程序。

嗯,第一次运行ortsg失败,报告:

纹理尺寸= 64X64

REMARK: can't open file:  testgame/ortsg/terrain.tga
REMARK: can't open file:  testgame/ortsg/noise.tga
Unable to load terrain noise texture testgame/ortsg/noise.tga
ERROR: /Users/karlphillip/installers/orts/orts/trunk/libs/gfxclient/src/GfxTerrain.C GfxTerrain() (line 213): failed to load noise image testgame/ortsg/noise.tga
REMARK: closing connection
REMARK: !!! already closed
REMARK: ~IO_Buffer called

即使文件在那里。所以我杀死了应用程序,然后再试一次:

2011-11-27 01:51:02.947 ortsg[390:903] GLUT Warning: glutInit being called a second time.
seed=1322365862
ERROR: /Users/karlphillip/installers/orts/orts/trunk/libs/network/src/TCP_Client.C connect() (line 27): can't connect
REMARK: mixer not open
REMARK: closing connection
REMARK: !!! already closed
/Users/karlphillip/installers/orts/orts/trunk/libs/network/src/TCP_Client.C connect() (line 27): can't connect
Abort trap

错误的第一行您可能很熟悉。即使应用程序被杀死,一些东西似乎留在某处挂起,和我发现绕过错误的唯一方法和有一个干净的运行应用程序是重新启动我的计算机。

这个应用程序似乎在Mac OS X上有问题,需要立即修复。我建议你在你的Mac上安装一个Linux虚拟机,或者甚至是一个Windows虚拟机,以便能够运行 ports ,如果你真的必须使用它。