【问题标题】:Compiling SDL within Adobe Crossbridge's Cygwin在 Adob​​e Crossbridge 的 Cygwin 中编译 SDL
【发布时间】:2013-07-13 22:28:15
【问题描述】:

Crossbridge 允许您编译 C/C++ 程序以针对闪存运行时。它在 cygwin 中带有自己修改过的 gcc。由于 SDL 只为 VC 或 mingw 提供开发 zip,我试图在这个 cygwin 环境中编译 SDL。然而,Crossbridge 的 gcc 是 4.2.1 版,根据谷歌搜索,SDL 无法在 cygwin 中使用高于 3 的 gcc 版本进行编译。当我运行./configure 时,它失败了:

*** Your compiler (/cygdrive/c/Users/Tom/Desktop/Crossbridge_1.0.1/sdk/usr/bin/g
cc.exe -jvmopt=-Xmx1G) does not produce Win32 executables!

当我只输入gcc 时,我得到:

bash: /usr/bin/gcc: cannot execute binary file

如果我使用一个编译器(即 gcc 的较低版本)编译 SDL 并尝试将它与 Crossbridge 编译器一起使用,会有什么不同吗?

有解决办法吗?

【问题讨论】:

  • 大部分 SDL 不会在 Flash 之上运行——您需要特定于 Flash 的图形后端、特定于 Flash 的音频后端、特定于 Flash 的输入后端。如果您只想要可移植的部分,请尝试将这些文件添加到您自己的项目中,并忽略 SDL 生成文件。
  • 然而,他们有一个使用 SDL 编译 Quake 的成功示例。那我该怎么办?
  • 嗯,看起来像they already have done (much of) the porting work。因此,您需要使用 Adob​​e FlasCC 的 SDL 版本,而不是 sdl.org 网站的版本。

标签: c++ gcc cygwin sdl


【解决方案1】:

我使用 Alex 查找/属性循环来修复我的 cygwin 安装中所有损坏的链接。我不知道他们为什么会出现。

第一次尝试失败并显示如下消息:

Invalid switch - /usr/lib/terminfo

为每个文件属性工作。

事实证明,对于我的 cygwin/Windows 组合,我必须 cd 进入目录并从那里执行 attrib。所以循环内容是:

do cd $(dirname $f); attrib +S $(basename $f);  done

【讨论】:

    【解决方案2】:

    我检查了 Crossbridge_1.0.1.zip,cc 和 gcc 可能链接断开(只有 56 字节?)但 gcc-4 似乎不错。

    编辑

    在 bash 中键入 gcc 时键入 gcc-4,您将看到通常的预期 no input files gcc 的错误消息,请尝试 gcc-4 -v

    Your compiler does not produce Win32 executables 的消息是由以下事实给出的:无论您已执行(或已自动执行)都使用 /cygdrive/c/Users/Tom/Desktop/Crossbridge_1.0.1/sdk/usr/bin/gcc.exe 作为您的编译器,但正如您已经检查过的那样,它没有t 工作,如果你用ls -l /usr/bin/gcc.exe 检查它,你会发现这只有 56 字节大小,这不可能是真正的编译器,我猜它可能是一个到真正编译器的符号链接,出于某种原因没有按预期工作(在 linux 上执行符号链接就像执行真正的二进制文件一样)。

    我不是 cygwin 的专家,但我想在某种程度上支持符号链接,阅读此 FAQ 让我想知道是否某些属性没有丢失打包/解包 zip,因此符号链接不认可。

    尝试重新创建它(它对我有用):

    cd /usr/bin # change directory
    rm gcc.exe # remove the broken link
    ln -s gcc-4.exe gcc.exe # re-create the symlink
    

    再次运行gcc,应该会按预期返回no input files错误。

    但这不是解决方案,因为可能在解压缩的文件中有许多损坏的符号链接。

    我不敢相信 Adob​​e 正在分发一个损坏的 SDK,所以也许有一些关于如何正确解压缩 SDK 并保留符号链接的说明(也许 unzip 有一个保留属性选项?我不太了解 zip 抱歉。

    编辑

    执行run.bat(bash)和cd到你解压SDK的主目录(我的是/cygdrive/c/crossbrige)

    cd /cygdrive/c/crossbrige
    
    for f in $(find ./ -type f -print0 | xargs -0 grep '!<symlink>' -l); do attrib +S $f; done
    

    这应该有望修复所有损坏的符号链接,唯一的副作用是任何包含!&lt;symlink&gt; 的文件都将设置属性 DOS SYSTEM,但是 cygwin 检查偏移量 0 处的这个魔术字符串和 S 属性以考虑文件作为符号链接,所以希望不会破坏任何东西。

    【讨论】:

    • 你能解释一下你的意思吗?
    • 谢谢 :) 成功了吗?我还有一些您可能感兴趣的信息,请告诉我。
    • 其实不是,我一个月前就发过这个问题了。我只是把赏金给了你,因为你的回答很有道理。
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2011-01-15
    • 2012-02-29
    • 2013-05-30
    • 1970-01-01
    • 2011-04-30
    • 2011-09-21
    相关资源
    最近更新 更多