【问题标题】:Compiling Bochs on Mac os x Snow Leopard在 Mac os x Snow Leopard 上编译 Bochs
【发布时间】:2009-11-04 23:10:32
【问题描述】:

是否有人能够在 Snow Leopard 下编译 Bochs 模拟器。 Leopard 对我来说工作得很好,但在 Snow Leopard 下我遇到了很多与 Carbon 库相关的问题......

好的,需要更多信息。

  • 我在 shell 上使用 make 编译; bochs 源附带的标准构建过程
  • 我成功地能够针对 10.5 SDK 进行编译。不幸的是,它没有在 Snow Leopard 下运行……总是崩溃
  • 然后我从 SnowLeopard CD 中安装了最新的 XCode,并针对 10.6 SDK 进行了编译;只更改 isysroot 标志以指向 10.6 而不是 10.5 现在编译器在查找一些碳标头时遇到问题...(-framework Carbon 作为参数包含在 g++ 中)

这里的错误...在为 bochs 编译基于碳的 gui 时失败:

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 错误

提前致谢 马克

【问题讨论】:

  • 你是在 32 位还是 64 位模式下编译?
  • 如何改进这些标签? osx?博克斯?
  • Mac4711:我们需要更多信息。你得到什么确切的错误信息?您是尝试在 Xcode 中构建,还是使用其他构建系统(例如 make)?请编辑您的问题以包含这些详细信息。

标签: macos osx-snow-leopard macos-carbon bochs


【解决方案1】:

我终于能够自己完成这项工作,但工作量比我预期的要多。安装 Bochs 可能有点喜怒无常,即使在 Linux 上也是如此。

注意

忘记尝试使用 Carbon 进行编译。 Apple 正在弃用它,您将无法使用它编译 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"

【讨论】:

    【解决方案2】:

    除了 James 所说的(添加 -m32 开关),您可能还需要添加“-arch i386”。

    这是我用来构建的修改后的 conf 文件:

    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: 错误:在此范围内未声明“CreateStandardAlert” carbon.cc:2153:错误:在此范围内未声明“RunStandardAlert” make[ 1]: *** [carbon.o] 错误 1
    【解决方案3】:

    首先,您必须运行“make dist-clean”来删除一些在 64 位模式下成功编译的库代码 - 这不会被常规的“make clean”删除,只有更激进的 dist-clean。否则,您的构建将尝试混合 32 位和 64 位代码,这是行不通的。

    现在设置 CFLAGS 和 CXXFLAGS 以包含 -m32 开关以强制 32 位模式。重新运行 ./configure,然后 make,你应该得到一个工作的 'bochs' 二进制文件。

    不过,在解决了构建问题之后,您可能会发现 Carbon 版本不再运行; X11 版本似乎是一个更好的选择。 (至少,在我的 Snow Leopard 系统上,Carbon 构建会因断言失败而提前失败;X11 可以按预期工作。)您可能能够运行 64 位 X11 构建,而无需依赖 Carbon,但我还没有尝试过这还没有,只有 32 位。

    【讨论】:

    • 您确定是dist-clean 而不是distclean?
    • Peter:很奇怪,是的,它确实是连字符的“dist-clean”;像你一样,我期待它是 distclean,这是我在其他项目中看到的,但不存在。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      mac 最简单的方法是 ....

      brew install home/x11/bochs
      

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

      【讨论】:

      • 不确定它是否仍然准确,我使用了brew install bochs。
      【解决方案6】:

      如果您想在 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 &amp;&amp; make

      【讨论】:

        【解决方案7】:

        @user6779

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

        例如从终端:

        ./bochs.app/Contents/MacOS/bochs
        

        您将不再收到该断言。

        【讨论】:

          【解决方案8】:

          这就是我在 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-30
            • 1970-01-01
            • 2010-12-12
            • 2010-11-24
            • 1970-01-01
            • 2011-10-26
            相关资源
            最近更新 更多