谷歌的原生客户端和编译SDL2

时间:2015-12-15 03:00:41

标签: c++ makefile sdl-2 google-nativeclient

我正在使用SDL2库来解决使用pepper_46构建应用程序的问题。我已经浏览了互联网,最终设法找到谷歌webports,这使我能够正确地为pnacl编译SDL2。

我现在遇到的问题实际上是用makefile编译所有内容......

这是我试图编译的最小c ++文件调用SDL_Init:

#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "SDL2/SDL.h"

class firstInstance : public pp::Instance {
public:
  explicit firstInstance(PP_Instance instance) : pp::Instance(instance)  {
    SDL_Init(SDL_INIT_VIDEO);
  }

  virtual ~firstInstance() {}
};

class firstModule : public pp::Module {
  public:
    firstModule() : pp::Module() {}
    virtual ~firstModule() {}

  virtual pp::Instance* CreateInstance(PP_Instance instance) {
    return new firstInstance(instance);
  }
};

namespace pp {
  Module* CreateModule(){
    return new firstModule();
  }
}

我还对makefile进行了一些更改,希望它能正确编译:

# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# GNU Makefile based on shared rules provided by the Native Client SDK.
# See README.Makefiles for more details.

VALID_TOOLCHAINS := pnacl

NACL_SDK_ROOT ?= $(abspath $(CURDIR)/..)

TARGET = first

include $(NACL_SDK_ROOT)/tools/common.mk

LIBS = SDLmain SDL2 ppapi_gles2 ppapi_simple ppapi_cpp nacl_io ppapi pthread

CFLAGS = -Wall -std=c++11
SOURCES = first.cc

# Build rules generated by macros from common.mk:

$(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))

# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
# On NaCl, only produce a stripped binary for Release configs (not Debug).
ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
$(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
$(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
else
$(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS)))
endif

$(eval $(call NMF_RULE,$(TARGET)))

但我得到的最好的是这个错误:

bobkingof12vs$ make serve
  CXX  pnacl/Release/first.o
  LINK pnacl/Release/first_unstripped.bc
/nacl/pepper_46/lib/pnacl/Release/libppapi_simple.a: error: undefined reference to 'PSUserMainGet'
make: *** [pnacl/Release/first_unstripped.bc] Error 1

我看了一篇帖子,建议有人使用ldflag -Wl,--undefined=PSUserMainGet修复了类似的问题...但我无法弄清楚如何将其正确添加到makefile中。如果这是正确的解决方案。我还看到他们的LIBS顺序错误了......将SDL2ppapi_simple放在列表中两次为其他人工作。他们都是旧帖子,但我没有尝试过任何工作(不是我必须正确尝试)

我非常失落......任何帮助都会受到赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

好吧,我找到了一些帮助我最终解决的消息来源......

因此,在完成正确安装SDL的webports交易后,我继续寻找正确使用的makefile。

最后在gituhub上发现了一个:https://github.com/emscripten-ports/SDL2/blob/master/test/nacl/Makefile(看起来与普通的nacl makefile有很多不同!)

说明该做什么:https://github.com/emscripten-ports/SDL2/blob/master/docs/README-nacl.md

我唯一需要做的就是将此函数添加到我的c ++代码中:

int SDL_main(int argc, char *argv[]){
  return 0;
}

我的代码现在编写至少可以说!立即崩溃,但编译!

如果发现缺少帮助的内容,我会发布更多内容