Собственный клиент Google и компиляция SDL2

Я сталкиваюсь с проблемой создания приложения с pepper_46 с использованием библиотек SDL2. Я покопался в интернете и наконец нашел веб- порталы Google, которые позволили мне правильно скомпилировать SDL2 для pnacl.

Проблема, с которой я столкнулся сейчас, заключается в том, что все компилируется с помощью make-файла...

Вот минимальный файл 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();
  }
}

Я также внес несколько изменений в мой make-файл в надежде, что он будет правильно скомпилирован:

# 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... но я не могу понять, как правильно добавить это в make-файл... если это даже правильное решение. Я также видел, что их LIBS в неправильном порядке... и положить SDL2 а также ppapi_simple в списке дважды работал на кого-то еще. Все это были старые посты, но ничего из того, что я пробовал, не работало

Я ужасно потерян... Любая помощь будет оценена.

Спасибо

1 ответ

Решение

Ну, я нашел несколько источников, которые помогли мне наконец понять это...

Итак, после выполнения сделки с веб-портами для правильной установки SDL я продолжил поиски правильного make-файла для использования.

Наконец-то нашёл один на gituhub: https://github.com/emscripten-ports/SDL2/blob/master/test/nacl/Makefile (выглядит очень по-другому, чем обычный make-файл nacl!)

С описанием того, что делать здесь: https://github.com/emscripten-ports/SDL2/blob/master/docs/README-nacl.md

Единственное, что мне нужно было сделать, это добавить эту функцию в мой код на C++:

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

Мой код теперь компилируется по меньшей мере! Вылетает мгновенно, но компилируется!

Я опубликую больше, если я найду что-то упущенное, что поможет

Другие вопросы по тегам