first of all, I'm sorry for bad type English.
I want to compile an old source with NDK and cocos2d in windows.
this is my command line:
ndk-build NDK_DEBUG=1 -C "G:/coc/androiddev/dpsg_android/proj.android" "NDK_MODULE_PATH=G:/coc/androiddev/cocos2dx:G:/coc/androiddev/cocos2dx/platform/third_party/android/prebuilt"
and this is my Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NativeRQD
LOCAL_SRC_FILES := prebuilt/armeabi/libNativeRQD.so
LOCAL_LDLIBS:= -L$(SYSROOT)/usr/lib -llog
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -DHAVE_CONFIG_H -D_GLIBCXX_PERMIT_BACKWARD_HASH -DCOCOS2D_DEBUG=1
LOCAL_MODULE := game_shared
LOCAL_MODULE_FILENAME := libgame
FILE_LIST := $(LOCAL_PATH)/DPSGApp/main.cpp
FILE_LIST += $(wildcard $(LOCAL_PATH)/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Common/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/NetWork/protobuf-2.4.1/src/google/protobuf/*.cc)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/NetWork/protobuf-2.4.1/src/google/protobuf/io/*.cc)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/NetWork/protobuf-2.4.1/src/google/protobuf/stubs/*.cc)
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/NetWork/snappy-1.0.5/snappy-sinksource.cc
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/NetWork/snappy-1.0.5/snappy-stubs-internal.cc
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/NetWork/snappy-1.0.5/snappy.cc
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/buffer.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/evbuffer.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/evdns.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/event.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/event_tagging.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/evutil.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/http.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/log.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/poll.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/epoll.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/select.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/signal.c
FILE_LIST += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/strlcpy.c
FILE_LIST += $(LOCAL_PATH)/../../../../rpc/proto/msg.pb.cc
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Network/net/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Graphics/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/GameFramework/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Classes/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Classes/GameLogic/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Classes/GameCenter/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/Connections/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../client/dpsg/GAI/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../engine/src/Patcher/*.cpp)
FILE_LIST += $(wildcard $(LOCAL_PATH)/../../../../engine/src/Patcher/7zDependencies/*.c)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../client/dpsg/Common
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/android
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/libevent-1.4.14b-stable/compat
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/net
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/protobuf-2.4.1
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/protobuf-2.4.1/src
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/snappy-1.0.5
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Network/src
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../rpc/proto
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/platform
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/platform/third_party/android/prebuilt
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/platform/third_party/android/prebuilt/libxml2/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/platform/android
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/cocoa
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/kazmath/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Graphics
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/extensions
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/shaders
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/support/zip_support
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/touch_dispatcher
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/cocos2dx/text_input_node
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/extensions/GUI/CCEditBox
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/extensions/GUI/CCControlExtension
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../androiddev/CocosDenshion/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/GameFramework
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Classes
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Classes/GameLogic
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Classes/GameCenter
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/Connections
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../client/dpsg/GAI
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../../engine/src/Patcher
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static
include $(BUILD_SHARED_LIBRARY)
$(call import-add-path, $(LOCAL_PATH)/../../../../androiddev)
$(call import-add-path, $(LOCAL_PATH)/../../../../androiddev/cocos2dx)
$(call import-add-path, $(LOCAL_PATH)/../../../../androiddev/CocosDenshion/android)
$(call import-add-path, $(LOCAL_PATH)/../../../../androiddev/cocos2dx/platform/third_party/android/prebuilt)
$(call import-module,cocos2dx)
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
first, everything is compiling good, but after a few minutes, I give "arm-linux-androideabi-g++: error: CreateProcess: No such file or directory" error.
I searched on google, stack overflow, cocos2d forum, but no any any any result.
I'm confused.
Check my image for more information:
http://imgur.com/a/GwCUT
Best Regards.
I built PCL library for Android with
hcteq.wordpress.com/2014/07/14/compiling-pcl-for-android-in-windows-cmake-gui
I tried to include these library in Android Studio with Project github.com/roomplan/tango-examples-java/tree/master/PointCloudJava_with_PCL
To write .mk and .gradle file, I referred
stackoverflow.com/questions/35491012/issue-running-pcl-library-with-android-project
github.com/kalectro/pcl_groovy/blob/master/mobile_apps/android/OpenNIRecorder/jni/Android.mk
Here is my Android.mk
LOCAL_PATH := $(call my-dir)
PROJECT_ROOT_FROM_JNI := ../../../../..
PROJECT_ROOT := $(LOCAL_PATH)/$(PROJECT_ROOT_FROM_JNI)
PCL_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/pcl-android
BOOST_ANDROID_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/boost-android
FLANN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/flann-android
EIGEN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/eigen
NDK_TOOLCHAIN_VERSION=4.9
# PCL libraries
PCL_STATIC_LIB_DIR := $(PCL_INCLUDE)/lib
BOOST_STATIC_LIB_DIR := $(BOOST_ANDROID_INCLUDE)/lib
FLANN_STATIC_LIB_DIR := $(FLANN_INCLUDE)/lib
PCL_STATIC_LIBRARIES := pcl_common pcl_geometry pcl_kdtree pcl_octree pcl_sample_consensus pcl_surface \
pcl_features pcl_keypoints pcl_search pcl_tracking pcl_filters pcl_ml \
pcl_registration pcl_segmentation
BOOST_STATIC_LIBRARIES := boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals boost_thread
FLANN_STATIC_LIBRARIES := flann_s flann_cpp_s
define build_pcl_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(PCL_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
define build_boost_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(BOOST_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
define build_flann_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(FLANN_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
$(foreach module,$(PCL_STATIC_LIBRARIES),$(eval $(call build_pcl_static,$(module))))
$(foreach module,$(BOOST_STATIC_LIBRARIES),$(eval $(call build_boost_static,$(module))))
$(foreach module,$(FLANN_STATIC_LIBRARIES),$(eval $(call build_flann_static,$(module))))
# Project and linking
include $(CLEAR_VARS)
LOCAL_MODULE := helloPcl
LOCAL_CFLAGS := -std=gnu++11
LOCAL_C_INCLUDES := $(PCL_INCLUDE)/include/pcl-1.6 \
$(BOOST_ANDROID_INCLUDE)/include \
$(EIGEN_INCLUDE) \
$(FLANN_INCLUDE)/include
LOCAL_LDFLAGS += -L$(PCL_INCLUDE)/lib \
-L$(BOOST_ANDROID_INCLUDE)/lib \
-L$(FLANN_INCLUDE)/lib
LOCAL_SHARED_LIBRARIES += pcl_common pcl_geometry pcl_search pcl_kdtree pcl_octree pcl_sample_consensus \
pcl_surface pcl_features pcl_filters pcl_keypoints pcl_tracking pcl_ml \
pcl_registration pcl_segmentation
LOCAL_SHARED_LIBRARIES += boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals boost_thread
LOCAL_SHARED_LIBRARIES += flann flann_cpp
LOCAL_SRC_FILES := jni_part.cpp \
pcl_lib.cpp
LOCAL_LDLIBS := -lstdc++ -lc -lm -llog -landroid -ldl -lGLESv2 -lEGL \
-lpcl_common -lpcl_geometry -lpcl_search -lpcl_kdtree -lpcl_octree -lpcl_sample_consensus \
-lpcl_surface -lpcl_features -lpcl_filters -lpcl_keypoints -lpcl_tracking -lpcl_ml \
-lpcl_registration -lpcl_segmentation \
-lflann -lflann_cpp
LOCAL_CFLAGS += -mfloat-abi=softfp -mfpu=neon -march=armv7 -mthumb -O3
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
#APP_STL := stlport_static
APP_CPPFLAGS := -frtti -fexceptions
APP_STL := gnustl_static
and build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.tangoproject.experiments.javapointcloud"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName 'helloPcl'
}
}
sourceSets.main {
jni.srcDirs = [];
jniLibs.srcDir 'src/main/libs'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build.cmd",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=1'
}
task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build.cmd",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'clean'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}
dependencies {
compile project(':tangoUtils')
compile files('libs/tango_java_lib.jar')
}
it seems that I have successfully linked the library for .cpp files, but there are errors show like this link
Does anyone know how to resolve this problem? Thanks.
PS There is similar question on Point Cloud Library (PCL) Users mailing list(www.pcl-users.org/Undefined-reference-to-PCDWrite-and-PCDWriteASCII-td4043323.html), but still no answer.
PS2 Or anyone can provide some instructions for using PCL in Android Studio?
Edit
I modified my Android.mk file here
LOCAL_PATH := $(call my-dir)
PROJECT_ROOT_FROM_JNI := ../../../../..
PROJECT_ROOT := $(LOCAL_PATH)/$(PROJECT_ROOT_FROM_JNI)
PCL_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/pcl-android
BOOST_ANDROID_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/boost-android
FLANN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/flann-android
EIGEN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/eigen
NDK_TOOLCHAIN_VERSION=4.9
# PCL libraries
PCL_STATIC_LIB_DIR := $(PCL_INCLUDE)/lib
BOOST_STATIC_LIB_DIR := $(BOOST_ANDROID_INCLUDE)/lib
FLANN_STATIC_LIB_DIR := $(FLANN_INCLUDE)/lib
PCL_STATIC_LIBRARIES := pcl_common pcl_geometry pcl_kdtree pcl_octree pcl_sample_consensus pcl_surface \
pcl_features pcl_keypoints pcl_search pcl_tracking pcl_filters pcl_ml \
pcl_registration pcl_segmentation pcl_io pcl_io_ply pcl_recognition
BOOST_STATIC_LIBRARIES := boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals boost_thread
FLANN_STATIC_LIBRARIES := flann_s flann_cpp_s
define build_pcl_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(PCL_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
define build_boost_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(BOOST_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
define build_flann_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(FLANN_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
$(foreach module,$(PCL_STATIC_LIBRARIES),$(eval $(call build_pcl_static,$(module))))
$(foreach module,$(BOOST_STATIC_LIBRARIES),$(eval $(call build_boost_static,$(module))))
$(foreach module,$(FLANN_STATIC_LIBRARIES),$(eval $(call build_flann_static,$(module))))
# Project and linking
include $(CLEAR_VARS)
LOCAL_MODULE := helloPcl
LOCAL_CFLAGS := -std=gnu++11
LOCAL_SRC_FILES := jni_part.cpp \ pcl_lib.cpp
#pcl library
LOCAL_LDFLAGS += -L$(PCL_INCLUDE)/lib \
-L$(BOOST_ANDROID_INCLUDE)/lib \
-L$(FLANN_INCLUDE)/lib
LOCAL_C_INCLUDES += $(PCL_INCLUDE)/include/pcl-1.6 \
$(BOOST_ANDROID_INCLUDE)/include \
$(EIGEN_INCLUDE) \
$(FLANN_INCLUDE)/include
LOCAL_STATIC_LIBRARIES += pcl_common pcl_geometry pcl_kdtree pcl_octree pcl_sample_consensus \
pcl_surface pcl_features pcl_io pcl_keypoints pcl_recognition \
pcl_search pcl_tracking pcl_filters pcl_io_ply pcl_ml \
pcl_registration pcl_segmentation
LOCAL_STATIC_LIBRARIES += boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals \
boost_thread
LOCAL_SHARED_LIBRARIES := tango_client_api tango_support_api
LOCAL_SHARED_LIBRARIES += flann flann_cpp
LOCAL_CFLAGS += -mfloat-abi=softfp -mfpu=neon -march=armv7 -mthumb -O3
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)
$(call import-add-path,$(PROJECT_ROOT))
$(call import-module,tango_client_api)
$(call import-module,tango_support_api)
and now there are different error
D:/Lab/senior/PCL/PointCloudJava_with_PCL_1/pointCloudJava_with_PCL/src/main/jni/../../../../../PCL/pcl-android/lib/libpcl_io.a(pcd_io.cpp.o):pcd_io.cpp:function pcl::PCDWriter::writeBinary(std::string const&, sensor_msgs::PointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&): error: undefined reference to '__page_size'
D:/Lab/senior/PCL/PointCloudJava_with_PCL_1/pointCloudJava_with_PCL/src/main/jni/../../../../../PCL/pcl-android/lib/libpcl_io.a(pcd_io.cpp.o):pcd_io.cpp:function pcl::PCDWriter::writeBinaryCompressedEigen(std::string const&, pcl::PointCloud<Eigen::Matrix<float, -1, -1, 0, -1, -1> > const&): error: undefined reference to '__page_size'
D:/Lab/senior/PCL/PointCloudJava_with_PCL_1/pointCloudJava_with_PCL/src/main/jni/../../../../../PCL/pcl-android/lib/libpcl_io.a(pcd_io.cpp.o):pcd_io.cpp:function pcl::PCDWriter::writeBinaryCompressed(std::string const&, sensor_msgs::PointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&): error: undefined reference to '__page_size'
D:/Lab/senior/PCL/PointCloudJava_with_PCL_1/pointCloudJava_with_PCL/src/main/jni/../../../../../PCL/pcl-android/lib/libpcl_io.a(pcd_io.cpp.o):pcd_io.cpp:function pcl::PCDWriter::writeBinaryEigen(std::string const&, pcl::PointCloud<Eigen::Matrix<float, -1, -1, 0, -1, -1> > const&): error: undefined reference to '__page_size'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [D:/Lab/senior/PCL/PointCloudJava_with_PCL_1/pointCloudJava_with_PCL/src/main/obj/local/armeabi-v7a/libhelloPcl.so] Error 1
make: Leaving directory `D:/Lab/senior/PCL/PointCloudJava_with_PCL_1/pointCloudJava_with_PCL/src/main/jni'
:pointCloudJava_with_PCL:buildNative FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':pointCloudJava_with_PCL:buildNative'.
> Process 'command 'C:\Users\CAIG\AppData\Local\Android\Sdk\ndk-bundle/ndk-build.cmd'' finished with non-zero exit value 2
If I add the line below in Android.mk, errors will not occur and can compile success
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
But when run the .apk, Android Monitor shows
java.lang.UnsatisfiedLinkError: dlopen failed: library "libtango_client_api.so" not found
During running build_native.py i get error "ExtensionMacros.h" no such file or directory.
The file itself is in cocos2d\extensions. I edited android.mk and uncommented line resposnsible for including this file. Why wont it find it?
Here is my android.mk:
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)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/extensions)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/Boxx.cpp \
../../Classes/World.cpp \
../../Classes/U.cpp \
../../Classes/CarrerWorld.cpp \
../../Classes/VisibleRect.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
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
include $(BUILD_SHARED_LIBRARY)
$(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)
and the top of error source cpp file :
#include "World.h"
#include "U.h"
#include "Boxx.h"
#include "Globals.h"
#include "VisibleRect.h"
#include "extensions/cocos-ext.h" //<---- this file includes "extensionMacros.h"
USING_NS_CC;
USING_NS_CC_EXT;
Does cocos2d/extensions/Android.mk have the line?
LOCAL_C_INCLUDES := $(LOCAL_PATH)/..
https://github.com/cocos2d/cocos2d-x/blob/v3/extensions/Android.mk#L40
It needs to find the header file.
how to call a c function in the C++ function with the same name?
calling 'extern "c"' to use c header and "::"operation to use the c function,
but the link error occur.
my code:
extern "C" {
#include <libavcodec/avcodec.h>
}
...
class DllAvCodec
{
public:
...
virtual void av_free_packet(AVPacket *pkt) { ::av_free_packet(pkt); }
...
}
the error:
D:/player/jni/lib/DllAvCodec.h:143: error: undefined reference to 'av_free_packet(AVPacket*)'
why the code "::av_free_packet(pkt)" invoke undefined?
my Android.mk is :
LOCAL_PATH := $(call my-dir)
DEFINES += \
-DTARGET_POSIX \
-DTARGET_LINUX \
-D_LINUX \
-DTARGET_ANDROID \
-D__STDC_CONSTANT_MACROS
######################################
#build ffmpeg prebuilt lib
######################################
include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_SRC_FILES := lib/lib/libavcodec.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavfilter
LOCAL_SRC_FILES := lib/lib/libavfilter.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavformat
LOCAL_SRC_FILES := lib/lib/libavformat.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavutil
LOCAL_SRC_FILES := lib/lib/libavutil.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libpostproc
LOCAL_SRC_FILES := lib/lib/libpostproc.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libswresample
LOCAL_SRC_FILES := lib/lib/libswresample.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libswscale
LOCAL_SRC_FILES := lib/lib/libswscale.a
LOCAL_EXPORT_C_INCLUDES +=$(LOCAL_PATH)/lib/include
include $(PREBUILT_STATIC_LIBRARY)
######################################
#build lib
######################################
include $(CLEAR_VARS)
LOCAL_MODULE:= player
base := $(LOCAL_PATH)
LOCAL_SRC_FILES += ......
LOCAL_CPPFLAGS += -Wall -fexceptions $(DEFINES)
LOCAL_LDLIBS += -llog -lz
LOCAL_LDFLAGS += -L../jni/lib/lib -lavcodec -lavformat -lavutil -lavfilter -lpostproc -lswscale -lswresample
LOCAL_STATIC_LIBRARIES := libavcodec \
libavformat \
libavutil \
libavfilter \
libpostproc \
libswscale \
libswresample
include $(BUILD_SHARED_LIBRARY)
After a day and a half of modification I've finally gotten the VLC project to almost compile under OS X. I get the following error when its just about to link libvlcjni.so. There are roughly 100 more undefined references, but most are to few functions:
std::__stl_throw_length_error(char const*)
std::__node_alloc::_M_deallocate(void*, unsigned int)
Has anyone got any pointers?
Compile thumb : vlcjni <= aout.c
Compile thumb : vlcjni <= pthread-condattr.c
Compile thumb : vlcjni <= pthread-rwlocks.c
Compile thumb : vlcjni <= eventfd.c
Compile thumb : vlcjni <= sem.c
SharedLibrary : libvlcjni.so
../vlc/android/modules/demux/mkv/.libs/libmkv_plugin.a(libmkv_plugin_la-mkv.o): In function std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_compare(char const*, char const*, char const*, char const*)':
/Android/ndk/sources/cxx-stl/stlport/stlport/stl/_string.h:1076: undefined reference tostd::__stl_throw_out_of_range(char const*)'
Application.mk
APP_PLATFORM := android-9
ifeq ($(NO_NEON),)
APP_ABI := armeabi-v7a
else ifneq ($(TEGRA2),)
APP_ABI := armeabi-v7a
else
APP_ABI := armeabi
endif
APP_STL := gnustl_static
APP_PLATFORM := android-9
APP_ABI := armeabi-v7a
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
ifeq ($(NO_NEON),)
ARCH=armeabi-v7a
LOCAL_MODULE := libvlcjni
else ifneq ($(TEGRA2),)
ARCH=armeabi-v7a
LOCAL_MODULE := libvlcjni-tegra2
else
ARCH=armeabi
LOCAL_MODULE := libvlcjni
endif
LOCAL_SRC_FILES := libvlcjni_danmaku.c aout.c pthread-condattr.c pthread-rwlocks.c eventfd.c sem.c
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/include
ifeq ($(NO_NDK_V7),1)
CPP_STATIC=$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/libs/$(ARCH)/libstdc++.a
else
CPP_STATIC=$(ANDROID_NDK)/sources/cxx-stl/stlport/libs/$(ARCH)/libstlport_static.a
endif
LOCAL_CFLAGS := -std=gnu99
LOCAL_LDLIBS := -L$(VLC_CONTRIB)/lib \
$(VLC_MODULES) \
$(VLC_BUILD_DIR)/lib/.libs/libvlc.a \
$(VLC_BUILD_DIR)/src/.libs/libvlccore.a \
$(VLC_BUILD_DIR)/compat/.libs/libcompat.a \
-ldl -lz -lm -llog \
-ldvbpsi -lebml -lmatroska -ltag \
-logg -lFLAC -ltheora \
-lmpeg2 -ldca -la52 \
-lavformat -lavcodec -lswscale -lavutil -lpostproc -lgsm -lopenjpeg \
-lliveMedia -lUsageEnvironment -lBasicUsageEnvironment -lgroupsock \
-lspeex -lspeexdsp \
-lxml2 -lpng -lgnutls -lgcrypt -lgpg-error -lfreetype -liconv \
$(CPP_STATIC)
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-gingerbread
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_GINGERBREAD)/frameworks/base/include $(ANDROID_SYS_HEADERS_GINGERBREAD)/system/core/include
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-hc
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_HC)/frameworks/base/include $(ANDROID_SYS_HEADERS_HC)/frameworks/base/native/include $(ANDROID_SYS_HEADERS_HC)/system/core/include $(ANDROID_SYS_HEADERS_HC)/hardware/libhardware/include
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libiomx-ics
LOCAL_SRC_FILES := ../$(VLC_SRC_DIR)/modules/codec/omxil/iomx.cpp
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/modules/codec/omxil $(ANDROID_SYS_HEADERS_ICS)/frameworks/base/include $(ANDROID_SYS_HEADERS_ICS)/frameworks/base/native/include $(ANDROID_SYS_HEADERS_ICS)/system/core/include $(ANDROID_SYS_HEADERS_ICS)/hardware/libhardware/include
LOCAL_LDLIBS := -L$(ANDROID_LIBS) -lgcc -lstagefright -lmedia -lutils -lbinder
include $(BUILD_SHARED_LIBRARY)
Try to include these lines into your Application.mk:
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
You have to explicitly enable the RTTI and Exceptions handling.
EDIT (response to your modifications):
# These are your lines in Application.mk
APP_PLATFORM := android-9
ifeq ($(NO_NEON),)
APP_ABI := armeabi-v7a
else ifneq ($(TEGRA2),)
APP_ABI := armeabi-v7a
else
APP_ABI := armeabi
endif
# Add these lines:
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
# I haven't seen them