cocos2dx 对于一些第三方库的引用路径上很多都不太明确,导致初学者挖坑不断,我之前玩的最后一个版本是3.6结果代码移植到3.10又各种编译不过,真是太蛋疼。典型的就是
libcurl库引用的问题
先说WIN32上,千万要注意路径问题,还有lib文件路径都得准确,为了避免以后移植麻烦,不要对WIN32工程改动包含库目录这个功能,在代码里这么引用才是正确的姿势
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) #include "curl/include/win32/curl/curl.h"//头文件位置 #pragma comment(lib,"libcurl_imp.lib")//动态链接库位置 #endif
再说最关键的Android上,Android.mk上要特别注意在最后面加上
$(call import-module,./curl/prebuilt/android)这句表示引入这个模块,至于路径为什么这么写,因为从cocos studio的默认ndk编译参数为:
NDK_MODULE_PATH=C:\Cocos\cocos2d-x/cocos2d-x-3.10;C:\Cocos\cocos2d-x/cocos2d-x-3.10/cocos;C:\Cocos\cocos2d-x/cocos2d-x-3.10/external
所以也就代表着从上面三个目录里寻找你要加载模块的.mk文件的目录,代码里应该#include "curl/curl.h"
所以代码里最终是如下这样的姿势:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) #include "curl/include/win32/curl/curl.h"//头文件位置 #pragma comment(lib,"libcurl_imp.lib")//动态链接库位置 #else if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "curl/curl.h"//头文件位置 #endif
mk文件是这样设置的
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp define walk $(wildcard $(1)) $(foreach e,$(wildcard $(1)/*),$(call walk,$(e))) endef ALLFILES = $(call walk,$(LOCAL_PATH)/../../Classes) FILE_LIST := hellocpp/main.cpp FILE_LIST += $(filter %.cpp,$(ALLFILES)) LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes LOCAL_STATIC_LIBRARIES := cocos2dx_static include $(BUILD_SHARED_LIBRARY) $(call import-module,./prebuilt-mk) $(call import-module,./curl/prebuilt/android)