0

所以我一直在尝试另一个编码项目,并认为我可以尝试的最好的事情是将RetroArch全部移植到一个模拟器中到Native Client,这样它很可能是一个完全在云中保存的打包应用程序浏览器。在 Github 上查找项目,因为我没有足够的链接。

RetroArch 在 linux 上构建的方式是运行一个配置脚本,然后是 make,然后是 sudo make install。更改配置代理以选择 Native Client 编译器,当发生这种情况时,我能够进入构建几秒钟,

http://pastebin.com/0WtrY6aU

在此处使用此自定义 Makefile。

http://pastebin.com/iv6RmQVr

我认为建造和调试这只小狗将是一条漫长的道路,但你建议我从哪里开始?

4

1 回答 1

2

你从一个好的地方开始,你刚刚遇到了你的第一个编译错误。

这里是:

In file included from settings.c:23:
input/input_common.h:73: error: redefinition of typedef ‘rarch_joypad_driver_t’
driver.h:327: note: previous declaration of ‘rarch_joypad_driver_t’ was here

以下是 input_common.h 的摘录:

typedef struct rarch_joypad_driver
{
   ...
} rarch_joypad_driver_t;

以下是 driver.h 的摘录:

typedef struct rarch_joypad_driver rarch_joypad_driver_t;

正如错误所说,正在重新定义 typedef。我使用来自 Ubuntu 12.04 的 gcc 4.6.3 进行了测试:

typedef struct foo { int bar; } foo_t;
typedef struct foo foo_t;
int main() { return 0; }

这可以很好地编译和链接。使用 x86_64-nacl-gcc(使用 gcc 4.4.3)编译的相同代码会出现以下错误:

typedef.c:2: error: redefinition of typedef ‘foo_t’
typedef.c:1: note: previous declaration of ‘foo_t’ was here

似乎在最近的 gcc 版本中这个错误已经被放宽了。我做了一些搜索,发现了这个 stackoverflow 链接:Why "Redefinition of typedef" error with GCC 4.3 but not GCC 4.6? .

值得注意的是,x86_64-nacl-g++ 将不加修改地编译这段代码。这里有两件事可以尝试:

  1. 使用 x86_64-nacl-g++ 而不是 x86_64-nacl-gcc 使用 CC 编译
  2. ifdef 去掉 driver.h 中的定义,并将该文件中的其他用途替换为struct rarch_joypad_driver.

对于#2,您可以使用以下内容:

#ifndef __native_client__
...
#endif

祝你好运,可能会有更多的编译失败需要修复。:)

于 2013-10-03T05:40:45.450 回答