Eclipseにおけるcocos2dx3.0のコンパイル上の小さな問題について

cocos2dx の c++ ファイルが jni の Android.mk ファイルに追加されましたが、まだ問題があります。同僚は以前にこの mk ファイルを変更し、Classes フォルダー内の cpp および c ファイルをループで読み取りました。内容は次のとおりです。次のように:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

# 配置自己的源文件目录和源文件后缀名
MY_FILES_PATH  :=  $(LOCAL_PATH) \
                   $(LOCAL_PATH)/../../Classes 

MY_FILES_SUFFIX := %.cpp %.c 

# 递归遍历目录下的所有的文件
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

# 获取相应的源文件
MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) ) 
MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_SRC_LIST  := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES)) 
MY_SRC_LIST  := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)

# 去除字串的重复单词
define uniq =
  $(eval seen :=)
  $(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))
  ${seen}
endef


# 递归遍历获取所有目录
MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) )
MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS))

MY_SRC_LIST := $(filter-out %Classes/main.cpp,$(MY_SRC_LIST))

# 赋值给NDK编译系统
LOCAL_SRC_FILES  := $(MY_SRC_LIST)
LOCAL_C_INCLUDES := $(MY_ALL_DIRS)

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static
# LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
# LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx-talkingdata

include $(BUILD_SHARED_LIBRARY)

define add_shared_lib
	include $(CLEAR_VARS)
	LOCAL_MODULE := $1
	LOCAL_MODULE_FILENAME := $1
	LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/$1.so
	include $(PREBUILT_SHARED_LIBRARY)
endef

shared_lib_names := libbdpush_V2_0 \
					libBaiduMapSDK_v2_3_1 \
					libGif \
					liblocSDK4 \
					libTeaCrypt
$(foreach item,$(shared_lib_names),$(eval $(call add_shared_lib,$(item))))

$(call import-module,.)
$(call import-module,audio/android)
$(call import-module,Box2D)
# $(call import-module,editor-support/cocosbuilder)
# $(call import-module,editor-support/spine)
# $(call import-module,editor-support/cocostudio)
$(call import-module,network)
$(call import-module,extensions)
#$(call import-module, proj.android/jni)

便宜上直接追加します

<pre name="code" class="html"># 赋值给NDK编译系统
LOCAL_SRC_FILES  := $(MY_SRC_LIST) \
<span style="white-space:pre">		</span>    $(LOCAL_PATH)/../../ShareSDK/C2DXShareSDK/Android/C2DXShareSDK.cpp \
<span style="white-space:pre">		</span>    ...等等

LOCAL_C_INCLUDES := $(MY_ALL_DIRS) \
<pre name="code" class="html"><span style="white-space:pre">		</span>    $(LOCAL_PATH)/../../ShareSDK/C2DXShareSDK/Android \
<span style="white-space:pre">		</span>    ...等等

 
 

 その結果、C2DXSshareSDK 内のさまざまな関数定義が見つかりませんでした。明らかに、ファイルはコンパイルされず、最終的には次のように変更されました。 
 

# 赋值给NDK编译系统
<pre name="code" class="html">MY_SRC_LIST += <span style="font-family: Arial, Helvetica, sans-serif;">../../ShareSDK/C2DXShareSDK/Android/C2DXShareSDK.cpp </span>
<pre name="code" class="html"><span style="font-family:Arial, Helvetica, sans-serif;">MY_SRC_LIST += ...等等</span>
<span style="font-family:Arial, Helvetica, sans-serif;">
</span>
<span style="font-family:Arial, Helvetica, sans-serif;"></span><pre name="code" class="html">MY_ALL_DIRS += <span style="font-family: Arial, Helvetica, sans-serif;">$(LOCAL_PATH)/../../ShareSDK/C2DXShareSDK/Android</span>

 
 
 
 
 
 
<pre name="code" class="html">MY_ALL_DIRS += ...等等

LOCAL_SRC_FILES := $(MY_SRC_LIST)LOCAL_C_INCLUDES := $(MY_ALL_DIRS)
 
 

まだコンパイルエラーがありますが、エラーは異なります。ベクトルが表示され、stdが見つかりません。この時点で、彼を呼び出すファイルに追加します。

include "cocos2d.h" 
using namespace std;
using namespace cocos2d;

要約すると、Android 用 ndk を使用するときに c/c++ ファイルが間違っている限り、コンパイル エラーのほとんどは jni の Android.mk ファイルにあります。

Android は Cocos2dx を使用します。cocos java の src ファイルを忘れずに追加してください。右クリックしてプロジェクトを選択し、[ビルド パス] -> [リンク ソース] を選択して、名前をカスタマイズし、必要なフォルダーを追加します。これが cocos2dx の java ディレクトリです。 .. \cocos2d\cocos\platform\android\java\src、もちろん、インポートなどの他の方法を使用して、インポート -> Android -> 既存の Android コードをワークスペースに選択し、cocos2dx3.0 以降を選択して直接選択することもできます。プロジェクト内の \cocos フォルダーを選択するだけです。

おすすめ

転載: blog.csdn.net/rsp19801226/article/details/41116501