在Mac OS X Snow Leopard上编译Bochs

10

有人能在Snow Leopard下编译Bochs模拟器吗?在Leopard下正常工作,但在Snow Leopard下出现了很多与Carbon库相关的问题...

好的,要求提供更多信息。

  • 我使用shell上的make编译;标准的bochs源代码构建过程
  • 我成功地编译了10.5 SDK。不幸的是,它在Snow Leopard下无法运行...总是崩溃
  • 然后我安装了来自Snow Leopard CD的最新XCode,并针对10.6 SDK进行了编译;除了将isysroot标志指向10.6而不是10.5之外,什么都没有改变,现在编译器有问题找不到一些carbon头文件...(-framework Carbon包含在g++的参数中)

这里是错误...当编译基于Carbon的bochs图形界面时失败:

g++ -c  -I.. -I./.. -I../iodev -I./../iodev -I../instrument/stubs -I./../instrument/stubs -pipe -O3 -isysroot /Developer/SDKs/MacOSX10.6.sdk -framework Carbon -fomit-frame-pointer -finline-functions -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-labels=16 -falign-loops-max-skip=15 -falign-jumps-max-skip=15 -fprefetch-loop-arrays  -fpascal-strings -fno-common -Wno-four-char-constants -Wno-unknown-pragmas -Dmacintosh -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES    carbon.cc -o carbon.o
carbon.cc:154: warning: non-local variable ‘<anonymous enum> last_screen_state’ uses anonymous type
carbon.cc:154: warning: non-local variable ‘<anonymous enum> screen_state’ uses anonymous type
carbon.cc:163: error: ‘CIconHandle’ does not name a type
carbon.cc: In function ‘OSStatus CEvtHandleWindowBackdropUpdate(OpaqueEventHandlerCallRef*, OpaqueEventRef*, void*)’:
carbon.cc:278: error: ‘GetWindowPortBounds’ was not declared in this scope
carbon.cc:279: error: ‘BackColor’ was not declared in this scope
carbon.cc:280: error: ‘EraseRect’ was not declared in this scope

...还有许多未声明的xxx错误

先感谢您 Mac


1
你正在编译32位还是64位模式? - ephemient
这些标签怎么改进呢?OSX?Bochs? - unknown
Mac4711:我们需要更多的信息。你得到了什么确切的错误消息?你是在尝试在Xcode中构建,还是使用其他构建系统如make?请编辑你的问题以包含这些细节。 - Peter Hosey
8个回答

9

我最终成功地完成了这个任务,但是它比我预期的要花费更多的工作。即使在Linux上,安装Bochs也可能有点棘手。

注意

不要尝试使用Carbon进行编译。苹果已经将其弃用,您将无法在64位模式下(Mac OS X的默认模式)编译应用程序。http://appleinsider.com/articles/12/02/18/mountain_lion_focuses_on_cocoa_drops_x11_and_deprecates_carbon

顺便说一句,Bochs团队不使用Mac OS X,也可能不会修复此问题。这可能是您帮助开源项目的机会:http://sourceforge.net/p/bochs/bugs/1204/

话虽如此,您应该可以通过一些微调来支持SDL。

安装SDL 1.2库

我从http://www.libsdl.org下载的SDL库无法正确使用,因此我使用Homebrew -- http://brew.sh -- 进行了安装:

brew install sdl

配置Bochs

我喜欢使用调试器(用于操作系统开发)配置Bochs,并将其安装在我的主目录中(以便我想删除它时可以轻松做到)。以下是我使用的配置命令:

./configure --enable-ne2000 \
            --enable-all-optimizations \
            --enable-cpu-level=6 \
            --enable-x86-64 \
            --enable-vmx=2 \
            --enable-pci \
            --enable-usb \
            --enable-usb-ohci \
            --enable-e1000 \
            --enable-debugger \
            --enable-disasm \
            --disable-debugger-gui \
            --with-sdl \
            --prefix=$HOME/opt/bochs

请注意,我添加了--disable-debugger-gui是因为如果您选择启用调试器,则默认情况下会启用它。但是,由于调试器GUI依赖于GTK +,而Mac OS X默认情况下未安装该软件包,您希望禁用它(GTK +是另一个您不想要处理的问题)。
接下来,请构建和安装Bochs。
make
make install

最后,只需设置BXSHARE环境变量并更新您的路径:
export BXSHARE="$HOME/opt/bochs/share/bochs"
export PATH="$PATH:$HOME/opt/bochs/bin"

5

除了James提到的(添加-m32开关),你可能还需要加入“-arch i386”。

以下是我用于构建的修改后的配置文件:

set echo
CFLAGS="-arch i386 -m32 -pipe -O3 -I/sw/include -fomit-frame-pointer -finline-functions -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-labels=16 -falign-loops-max-skip=15 -falign-jumps-max-skip=15 -fprefetch-loop-arrays $CFLAGS"
CPATH="/sw/include"
CPPFLAGS=""
CXXFLAGS="$CFLAGS"
LDFLAGS="-arch i386 -m32 -L/sw/lib"
CXX="g++ -arch i386 -m32"

export CFLAGS
export CPATH
export CPPFLAGS
export CXXFLAGS
export LDFLAGS
export CXX

./configure --enable-sb16 \
     --enable-ne2000 \
     --enable-all-optimizations \
            --enable-cpu-level=6 \
            --enable-x86-64 \
            --enable-sse=2 \
            --enable-pci \
            --enable-acpi \
            --enable-debugger \
            --enable-clgd54xx \
            --enable-usb \
     --enable-plugins \
     ${CONFIGURE_ARGS}

我仍然会遇到错误,例如:carbon.cc:2148: error: ‘CreateStandardAlert’ was not declared in this scope carbon.cc:2153: error: ‘RunStandardAlert’ was not declared in this scope make[1]: *** [carbon.o] Error 1 - xissburg

4
首先,您需要运行“make dist-clean”以摆脱一些在64位模式下成功编译的库代码 - 这不会被常规的“make clean”删除,只有更激进的dist-clean才能实现。否则,您的构建将尝试混合32位和64位代码,这是行不通的。
现在设置CFLAGS和CXXFLAGS包含-m32开关以强制使用32位模式。重新运行./configure,然后进行make,您应该得到一个可工作的'bochs'二进制文件。
虽然已经解决了构建问题,但您可能会发现Carbon版本不再运行; X11版本似乎是更好的选择。(至少,在我的Snow Leopard系统上,Carbon构建早期失败并出现断言失败;X11按预期工作。)您可能能够在没有Carbon依赖项的情况下运行64位X11构建,但我尚未尝试过,只有32位。

你确定是 dist-clean 而不是 distclean 吗? - Peter Hosey
1
彼得:奇怪的是,确实是带连字符的“dist-clean”;像你一样,我也期望它是distclean,因为在其他项目中我见过这种写法,但那并不存在。 - James Sutherland

1
最简单的方法是在Mac上使用....
brew install home/x11/bochs

我尝试了其他方法很长时间...但失败了... 在MacOS X 10.11下


1
不确定这是否仍然准确,我使用了 brew install bochs - Cinn

1

雪豹默认编译64位,但GUI Carbon应用程序必须是32位。


1

如果您想在64位Mac上运行Bochs,您需要使用不同的GUI库。我建议使用X或SDL。

SDL: 要这样做,首先从http://www.libsdl.org/download-1.2.php下载并安装LibSDL,您需要二进制文件和开发库。

提取Bochs源文件后,运行./configure --with-sdl=path-to-libsdl-dev-files

X11: 它应该可以直接构建:./configure --with-x11 && make


0

@user6779

请确保您使用的不是生成的平面UNIX二进制文件,而是Mac OS包(称为bochs.app)。

例如,在终端中:

./bochs.app/Contents/MacOS/bochs

你将不再收到该断言。


0

在我的MacOS X 10.10上,使用Xcode7开发工具和XQuarz 2.7.7,它对我很有效。

export CFLAGS=-I/opt/X11/include
export CXXFLAGS=-I/opt/X11/include
export LDFLAGS=-L/opt/X11/lib -lX11
./configure   --enable-debugger --enable-debugger-gui   --enable-all-optimizations    --enable-x86-debugger   --enable-ne2000   --enable-e1000  --enable-pnic   --with-x11  --without-carbon
make
sudo make install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接