OpenCV, Android and JNI - android

I'm developing a Android application which JNI code and this code makes use of OpenCV library.
The .c class of JNI code is "sintetica.c":
#include <jni.h>
#include "sintetica.h"
#include <opencv/cv.h>
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/types_c.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
jint Java_com_example_imagen3d_Imagen3DActivity_sintetica(JNIEnv *env, jobject thiz,jint argc, jchar *argv[]) {
...
return 0;
}
The Android.mk file :
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=off
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=STATIC
include /home/vmg/workspace/android/OpenCV-2.4.5-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE :=sintetica
LOCAL_LDLIBS += -llog -ldl
LOCAL_SRC_FILES :=sintetica.c
include $(BUILD_SHARED_LIBRARY)
The Application.mk file :
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a armeabi x86
APP_PLATFORM := android-8
And the Java class:
![public class Imagen3DActivity extends Activity {
...
public native int Java_com_example_imagen3d_Imagen3DActivity_sintetica(int argc, char argv\[\]);
static {
System.loadLibrary("sintetica");
}
}]
I'm a Linux user and I'm using Eclipse Juno and Opencv 2.4.5, although for the .c class i used OpenCV library of linux repositories and i don't know what version is it.
A part of the errors which happen is as follows:
20:10:55 **** Incremental Build of configuration Default for project Imagen3D ****
/home/vmg/android/android-ndk-r8c/ndk-build
SharedLibrary : libsintetica.so
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0x86): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0x94): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0xa4): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0x11c): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0x9c4): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0xb78): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0x2058): error: undefined reference to '__cxa_end_cleanup'
/home/vmg/android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libopencv_photo.a(inpaint.cpp.o): in function cvInpaint:inpaint.cpp(.text.cvInpaint+0x2146): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)'
...
Thanks!

Related

Integrate Android with Halcon

I want integrate android NDK with Halcon.
I try use the libs ( headers files) to evoke Halcon methods.
For example:
#include <jni.h>
#include "com_example_joseubuntu_integrationhalcon_MainActivity.h"
# include "HALCONCpp/HalconCpp.h"
# include "HALCONCpp/HDevThread.h"
using namespace HalconCpp;
JNIEXPORT void JNICALL Java_com_example_joseubuntu_integrationhalcon_MainActivity_testFunction(JNIEnv * env, jobject obj)
{
HTuple hv_BarCodeHandle;
HTuple hv_DecodedDataStrings;
HObject ho_Image,ho_SymbolRegions;
CreateBarCodeModel(HTuple(), HTuple(), &hv_BarCodeHandle);
SetBarCodeParam(hv_BarCodeHandle, "stop_after_result_num", 1);
ReadImage(&ho_Image, "/res/drawable/codebar");
FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "EAN-13", &hv_DecodedDataStrings);
WriteImage(ho_SymbolRegions, "png", "0xffff00", "Teste.png");
}
Is a simple example to read barCodes, i don't know if this work, because i have this errors:
Error:error: undefined reference to 'HalconCpp::HTuple::~HTuple()'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple(char const*)'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple()'
Error:error: undefined reference to 'HalconCpp::HTuple::~HTuple()'
Error:error: undefined reference to 'HalconCpp::HObjectBase::HObjectBase()'
Error:error: undefined reference to 'HalconCpp::CreateBarCodeModel(HalconCpp::HTuple const&, HalconCpp::HTuple const&, HalconCpp::HTuple*)'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple()'
Error:error: undefined reference to 'HalconCpp::HTuple::~HTuple()'
Error:error: undefined reference to 'HalconCpp::SetBarCodeParam(HalconCpp::HTuple const&, HalconCpp::HTuple const&, HalconCpp::HTuple const&)'
Error:error: undefined reference to 'HalconCpp::HObjectBase::HObjectBase()'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple(int)'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple()'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple()'
Error:error: undefined reference to 'HalconCpp::HTuple::~HTuple()'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple(char const*)'
Error:error: undefined reference to 'HalconCpp::ReadImage(HalconCpp::HObject*, HalconCpp::HTuple const&)'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple(char const*)'
Error:error: undefined reference to 'HalconCpp::FindBarCode(HalconCpp::HObject const&, HalconCpp::HObject*, HalconCpp::HTuple const&, HalconCpp::HTuple const&, HalconCpp::HTuple*)'
Error:error: undefined reference to 'HalconCpp::HTuple::HTuple(char const*)'
Error:error: undefined reference to 'HalconCpp::WriteImage(HalconCpp::HObject const&, HalconCpp::HTuple const&, HalconCpp::HTuple const&, HalconCpp::HTuple const&)'
Error:error: undefined reference to 'HalconCpp::HObjectBase::~HObjectBase()'
Error:error: undefined reference to 'HalconCpp::HObjectBase::~HObjectBase()'
Thanks!
Do you have the halcon library for android?
If the library you used is not for android, it cannot work.
If you have the library for android, you should import the so library in the Android.mk like this:
include $(CLEAR_VARS)
LOCAL_MODULE := libhalcon
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libhalcon.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libhalconcpp
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libhalconcpp.so
include $(PREBUILT_SHARED_LIBRARY)

Android NDK and STL-related reference errors on x86

I'm building an integration with the V8 library. This builds works fine for ARM (armeabi, armeabi-v7a) targets.
I want to add x86 support. Today is the first time I've tried this.
I built V8 for x86 via make ia32.release.
My Application.mk is as follows:
APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-14
APP_STL := stlport_static
and Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := v8_libbase
LOCAL_SRC_FILES := ./libs/$(TARGET_ARCH_ABI)/libv8_libbase.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := v8_base
LOCAL_SRC_FILES := ./libs/$(TARGET_ARCH_ABI)/libv8_base.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := v8_nosnapshot
LOCAL_SRC_FILES := ./libs/$(TARGET_ARCH_ABI)/libv8_nosnapshot.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := v8_platform
LOCAL_SRC_FILES := ./libs/$(TARGET_ARCH_ABI)/libv8_libplatform.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := v8jsevaluator
LOCAL_SRC_FILES := v8jsevaluator.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/
LOCAL_LDLIBS := -llog -landroid
LOCAL_STATIC_LIBRARIES := v8_base v8_nosnapshot v8_libbase v8_platform
LOCAL_CPP_FEATURES += exceptions
LOCAL_CFLAGS += -std=c++11
include $(BUILD_SHARED_LIBRARY)
The build fails in the x86 component with a lot of errors relating to STL.
12:13:39 **** Incremental Build of configuration Default for project v8jsevaluator ****
"C:\\Development\\android-ndk-r10d\\ndk-build.cmd" all
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml
[armeabi] Install : libv8jsevaluator.so => libs/armeabi/libv8jsevaluator.so
[armeabi-v7a] Install : libv8jsevaluator.so => libs/armeabi-v7a/libv8jsevaluator.so
[x86] SharedLibrary : libv8jsevaluator.so
jni/./libs/x86/libv8_base.a(assembler.o):assembler.cc:function std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) [clone .part.30]: error: undefined reference to 'std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
jni/./libs/x86/libv8_base.a(assembler.o):assembler.cc:function v8::internal::operator<<(std::ostream&, v8::internal::ExternalReference): error: undefined reference to 'std::ostream& std::ostream::_M_insert<void const*>(void const*)'
jni/./libs/x86/libv8_base.a(assembler.o):assembler.cc:function v8::internal::operator<<(std::ostream&, v8::internal::ExternalReference): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
jni/./libs/x86/libv8_base.a(assembler.o):assembler.cc:function v8::internal::operator<<(std::ostream&, v8::internal::ExternalReference): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
jni/./libs/x86/libv8_base.a(assembler.o):assembler.cc:function v8::internal::operator<<(std::ostream&, v8::internal::ExternalReference): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
jni/./libs/x86/libv8_base.a(assembler.o):assembler.cc:function v8::internal::operator<<(std::ostream&, v8::internal::ExternalReference): error: undefined reference to 'std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
jni/./libs/x86/libv8_base.a(bootstrapper.o):bootstrapper.cc:function std::vector<unsigned char, std::allocator<unsigned char> >::resize(unsigned int): error: undefined reference to 'std::__throw_length_error(char const*)'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) [clone .part.32]: error: undefined reference to 'std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::CallFunctionStub::PrintName(std::ostream&) const: error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::CallFunctionStub::PrintName(std::ostream&) const: error: undefined reference to 'std::ostream::operator<<(int)'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::CodeStub::PrintBaseName(std::ostream&) const: error: undefined reference to 'std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::BinaryOpICStub::GenerateAheadOfTime(v8::internal::Isolate*, v8::internal::BinaryOpICState const&): error: undefined reference to 'VTT for std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::BinaryOpICStub::GenerateAheadOfTime(v8::internal::Isolate*, v8::internal::BinaryOpICState const&): error: undefined reference to 'VTT for std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::BinaryOpICStub::GenerateAheadOfTime(v8::internal::Isolate*, v8::internal::BinaryOpICState const&): error: undefined reference to 'vtable for std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
C:/Development/android-ndk-r10d/toolchains/x86-4.8/prebuilt/windows-x86_64/bin/../lib/gcc/i686-linux-android/4.8/../../../../i686-linux-android/bin/ld.exe: the vtable symbol may be undefined because the class is missing its key function
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::BinaryOpICStub::GenerateAheadOfTime(v8::internal::Isolate*, v8::internal::BinaryOpICState const&): error: undefined reference to 'vtable for std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >'
C:/Development/android-ndk-r10d/toolchains/x86-4.8/prebuilt/windows-x86_64/bin/../lib/gcc/i686-linux-android/4.8/../../../../i686-linux-android/bin/ld.exe: the vtable symbol may be undefined because the class is missing its key function
jni/./libs/x86/libv8_base.a(code-stubs.o):code-stubs.cc:function v8::internal::BinaryOpICStub::GenerateAheadOfTime(v8::internal::Isolate*, v8::internal::BinaryOpICState const&): error: undefined reference to 'std::string::_Rep::_S_empty_rep_storage'
<snipped for brevity>
jni/./libs/x86/libv8_libbase.a(platform-posix.o):platform-posix.cc:function v8::base::OS::FPrint(_IO_FILE*, char const*, ...): error: undefined reference to '__vfprintf_chk'
jni/./libs/x86/libv8_libbase.a(platform-posix.o):platform-posix.cc:function v8::base::OS::VFPrint(_IO_FILE*, char const*, char*): error: undefined reference to '__vfprintf_chk'
jni/./libs/x86/libv8_libbase.a(platform-posix.o):platform-posix.cc:function v8::base::OS::SNPrintF(char*, int, char const*, ...): error: undefined reference to '__vsnprintf_chk'
jni/./libs/x86/libv8_libbase.a(platform-posix.o):platform-posix.cc:function v8::base::OS::VSNPrintF(char*, int, char const*, char*): error: undefined reference to '__vsnprintf_chk'
jni/./libs/x86/libv8_libplatform.a(default-platform.o):default-platform.cc:function void std::deque<v8::Task*, std::allocator<v8::Task*> >::_M_push_back_aux<v8::Task* const&>(v8::Task* const&): error: undefined reference to 'std::__throw_bad_alloc()'
collect2.exe: error: ld returned 1 exit status
make.exe: *** [obj/local/x86/libv8jsevaluator.so] Error 1
12:13:41 Build Finished (took 1s.821ms)
As I said, without the attempt to build x86, this is all OK.
Please can anyone point me at where I'm going wrong? Thanks!
I upgraded my source of V8 from 4.1.0.22 to 4.9.385.30 and - after solving a lot of other issues - this problem went away.

Cocos2d-x 3.2 Slider undefined in Android

I have a game that I want to deploy on both android and ios. The ios version works fine, its compiled without errors. But when I run the build_native.py I got undefined error. I'll include my codes and the error message below. Thank in advance.
CODE
#ifndef __SETTING_SCENE_H__
#define __SETTING_SCENE_H__
#include "cocos2d.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
using namespace ui;
class SettingScreen : public cocos2d::Layer {
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// implement the "static create()" method manually
CREATE_FUNC(SettingScreen);
int fontSize = 18;
int bgmVolume = 100;
int sfxVolume = 100;
void Back(Ref *pSender);
void BgmSliderEvent(Ref *pSender, Slider::EventType type);
void SfxSliderEvent(Ref *pSender, Slider::EventType type);
};
#endif // __SETTING_SCENE_H__
ERROR
The Selected NDK toolchain version was 4.8 !
Android NDK: WARNING:jni/../../cocos2d/cocos/./Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
Android NDK: WARNING:jni/../../cocos2d/cocos/platform/android/Android.mk:cocos2dxandroid_static: LOCAL_LDLIBS is always ignored for static libraries
make: Entering directory `/cocos2dx/TestGame/proj.android'
[armeabi] SharedLibrary : libcocos2dcpp.so
jni/../../Classes/Scenes/SettingScene.cpp:72: error: undefined reference to 'cocos2d::ui::Slider::create()'
jni/../../Classes/Scenes/SettingScene.cpp:73: error: undefined reference to 'cocos2d::ui::Slider::loadBarTexture(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cocos2d::ui::Widget::TextureResType)'
jni/../../Classes/Scenes/SettingScene.cpp:74: error: undefined reference to 'cocos2d::ui::Slider::loadSlidBallTextures(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cocos2d::ui::Widget::TextureResType)'
jni/../../Classes/Scenes/SettingScene.cpp:80: error: undefined reference to 'cocos2d::ui::Slider::setPercent(int)'
jni/../../Classes/Scenes/SettingScene.cpp:81: error: undefined reference to 'cocos2d::ui::Slider::addEventListener(std::__1::function<void (cocos2d::Ref*, cocos2d::ui::Slider::EventType)> const&)'
jni/../../Classes/Scenes/SettingScene.cpp:91: error: undefined reference to 'cocos2d::ui::Slider::create()'
jni/../../Classes/Scenes/SettingScene.cpp:92: error: undefined reference to 'cocos2d::ui::Slider::loadBarTexture(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cocos2d::ui::Widget::TextureResType)'
jni/../../Classes/Scenes/SettingScene.cpp:93: error: undefined reference to 'cocos2d::ui::Slider::loadSlidBallTextures(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cocos2d::ui::Widget::TextureResType)'
jni/../../Classes/Scenes/SettingScene.cpp:99: error: undefined reference to 'cocos2d::ui::Slider::setPercent(int)'
jni/../../Classes/Scenes/SettingScene.cpp:100: error: undefined reference to 'cocos2d::ui::Slider::addEventListener(std::__1::function<void (cocos2d::Ref*, cocos2d::ui::Slider::EventType)> const&)'
jni/../../Classes/Scenes/SettingScene.cpp:113: error: undefined reference to 'cocos2d::ui::Slider::getPercent() const'
jni/../../Classes/Scenes/SettingScene.cpp:116: error: undefined reference to 'typeinfo for cocos2d::ui::Slider'
jni/../../Classes/Scenes/SettingScene.cpp:121: error: undefined reference to 'cocos2d::ui::Slider::getPercent() const'
jni/../../Classes/Scenes/SettingScene.cpp:124: error: undefined reference to 'typeinfo for cocos2d::ui::Slider'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [obj/local/armeabi/libcocos2dcpp.so] Error 1
make: Leaving directory `/cocos2dx/TestGame/proj.android'
Traceback (most recent call last):
File "TestGame/proj.android/build_native.py", line 159, in <module>
build(opts.ndk_build_param,opts.android_platform,opts.build_mode)
File "TestGame/proj.android/build_native.py", line 146, in build
do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode)
File "TestGame/proj.android/build_native.py", line 82, in do_build
raise Exception("Build dynamic library for project [ " + app_android_root + " ] fails!")
Exception: Build dynamic library for project [ /cocos2dx/TestGame/proj.android ] fails!
You should replace your Android.mk file under proj.android directory with the following code:
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
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_ui_static
include $(BUILD_SHARED_LIBRARY)
$(call import-module,.)
$(call import-module,audio/android)
$(call import-module,ui)
Pay attention to the LOCAL_WHOLE_STATIC_LIBRARIES += cocos_ui_static and $(call import-module,ui). These two lines add the ui dependency to your project.

Cannot run new cocos2d-x project

I tried to solve this problem by own but i don't have more ideas;(
I created with the cocos2d-x console an new project.
Now i want to compile this but alway i get this error(s).
I use actually the newest at bundle for mac, apache-ant-1.9.4 & android NDK-r9d
MacBook-Air:3sCube to-dev$ cocos run -p android -v
Running command: compile
Building mode: debug
building native
NDK build mode: debug
The Selected NDK toolchain version was 4.8 !
running: '/Users/to-dev/Desktop/android-ndk-r9d/ndk-build -C /Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android -j1 NDK_MODULE_PATH=/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d:/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos:/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/external NDK_DEBUG=1'
Android NDK: WARNING:/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
Android NDK: WARNING:/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/platform/android/Android.mk:cocos2dxandroid_static: LOCAL_LDLIBS is always ignored for static libraries
make: Entering directory `/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android'
[armeabi] StaticLibrary : libcocos2d.a
[armeabi] StaticLibrary : libcocosdenshion.a
[armeabi] StaticLibrary : libchipmunk.a
[armeabi] StaticLibrary : libcocos2dandroid.a
[armeabi] StaticLibrary : libcpufeatures.a
[armeabi] SharedLibrary : libcocos2dcpp.so
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCActionManager.cpp:81: error: undefined reference to 'cocos2d::ccArrayNew(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCActionManager.cpp:100: error: undefined reference to 'cocos2d::ccArrayRemoveObjectAtIndex(cocos2d::_ccArray*, int, bool)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCAtlasNode.cpp:93: error: undefined reference to 'cocos2d::TextureAtlas::initWithTexture(cocos2d::Texture2D*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCAtlasNode.cpp:138: error: undefined reference to 'cocos2d::QuadCommand::init(float, unsigned int, cocos2d::GLProgramState*, cocos2d::BlendFunc, cocos2d::V3F_C4B_T2F_Quad*, int, cocos2d::Mat4 const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCFontAtlas.cpp:76: error: undefined reference to 'cocos2d::Texture2D::initWithData(void const*, int, cocos2d::Texture2D::PixelFormat, int, int, cocos2d::Size const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCFontAtlas.cpp:268: error: undefined reference to 'cocos2d::Texture2D::initWithData(void const*, int, cocos2d::Texture2D::PixelFormat, int, int, cocos2d::Size const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCFontAtlas.cpp:312: error: undefined reference to 'cocos2d::Texture2D::initWithData(void const*, int, cocos2d::Texture2D::PixelFormat, int, int, cocos2d::Size const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCGrid.cpp:133: error: undefined reference to 'cocos2d::Texture2D::initWithData(void const*, int, cocos2d::Texture2D::PixelFormat, int, int, cocos2d::Size const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCLabel.cpp:1326: error: undefined reference to 'cocos2d::TextureAtlas::updateQuad(cocos2d::V3F_C4B_T2F_Quad*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCLabelAtlas.cpp:208: error: undefined reference to 'cocos2d::TextureAtlas::increaseTotalQuadsWith(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCLabelAtlas.cpp:219: error: undefined reference to 'cocos2d::TextureAtlas::resizeCapacity(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCLabelAtlas.cpp:250: error: undefined reference to 'cocos2d::TextureAtlas::updateQuad(cocos2d::V3F_C4B_T2F_Quad*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParallaxNode.cpp:68: error: undefined reference to 'cocos2d::ccArrayNew(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParallaxNode.cpp:126: error: undefined reference to 'cocos2d::ccArrayRemoveObjectAtIndex(cocos2d::_ccArray*, int, bool)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:100: error: undefined reference to 'cocos2d::TextureAtlas::initWithTexture(cocos2d::Texture2D*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:459: error: undefined reference to 'cocos2d::TextureAtlas::fillWithEmptyQuadsFromIndex(int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:465: error: undefined reference to 'cocos2d::TextureAtlas::moveQuadsFromIndex(int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:469: error: undefined reference to 'cocos2d::TextureAtlas::increaseTotalQuadsWith(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:291: error: undefined reference to 'cocos2d::TextureAtlas::moveQuadsFromIndex(int, int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:379: error: undefined reference to 'cocos2d::TextureAtlas::removeQuadsAtIndex(int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:382: error: undefined reference to 'cocos2d::TextureAtlas::fillWithEmptyQuadsFromIndex(int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleBatchNode.cpp:433: error: undefined reference to 'cocos2d::TextureAtlas::resizeCapacity(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleExamples.cpp:52: error: undefined reference to 'cocos2d::Image::initWithImageData(unsigned char const*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleSystem.cpp:403: error: undefined reference to 'cocos2d::ZipUtils::inflateMemory(unsigned char*, int, unsigned char**)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleSystem.cpp:409: error: undefined reference to 'cocos2d::Image::initWithImageData(unsigned char const*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCParticleSystemQuad.cpp:377: error: undefined reference to 'cocos2d::QuadCommand::init(float, unsigned int, cocos2d::GLProgramState*, cocos2d::BlendFunc, cocos2d::V3F_C4B_T2F_Quad*, int, cocos2d::Mat4 const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCRenderTexture.cpp:526: error: undefined reference to 'cocos2d::Image::initWithRawData(unsigned char const*, int, int, int, int, bool)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCRenderTexture.cpp:530: error: undefined reference to 'cocos2d::Image::initWithRawData(unsigned char const*, int, int, int, int, bool)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSprite.cpp:336: error: undefined reference to 'cocos2d::Image::initWithRawData(unsigned char const*, int, int, int, int, bool)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSprite.cpp:568: error: undefined reference to 'cocos2d::TextureAtlas::updateQuad(cocos2d::V3F_C4B_T2F_Quad*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSprite.cpp:595: error: undefined reference to 'cocos2d::QuadCommand::init(float, unsigned int, cocos2d::GLProgramState*, cocos2d::BlendFunc, cocos2d::V3F_C4B_T2F_Quad*, int, cocos2d::Mat4 const&)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSprite.cpp:913: error: undefined reference to 'cocos2d::TextureAtlas::updateQuad(cocos2d::V3F_C4B_T2F_Quad*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSpriteBatchNode.cpp:99: error: undefined reference to 'cocos2d::TextureAtlas::initWithTexture(cocos2d::Texture2D*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSpriteBatchNode.cpp:548: error: undefined reference to 'cocos2d::TextureAtlas::insertQuad(cocos2d::V3F_C4B_T2F_Quad*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSpriteBatchNode.cpp:560: error: undefined reference to 'cocos2d::TextureAtlas::removeQuadAtIndex(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSpriteBatchNode.cpp:405: error: undefined reference to 'cocos2d::TextureAtlas::resizeCapacity(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCSpriteBatchNode.cpp:639: error: undefined reference to 'cocos2d::TextureAtlas::insertQuad(cocos2d::V3F_C4B_T2F_Quad*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXLayer.cpp:91: error: undefined reference to 'cocos2d::ccCArrayNew(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXLayer.cpp:448: error: undefined reference to 'cocos2d::ccCArrayInsertValueAtIndex(cocos2d::_ccCArray*, void*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXLayer.cpp:384: error: undefined reference to 'cocos2d::ccCArrayInsertValueAtIndex(cocos2d::_ccCArray*, void*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXLayer.cpp:585: error: undefined reference to 'cocos2d::ccCArrayRemoveValueAtIndex(cocos2d::_ccCArray*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXLayer.cpp:595: error: undefined reference to 'cocos2d::TextureAtlas::removeQuadAtIndex(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXLayer.cpp:565: error: undefined reference to 'cocos2d::ccCArrayRemoveValueAtIndex(cocos2d::_ccCArray*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTMXXMLParser.cpp:646: error: undefined reference to 'cocos2d::ZipUtils::inflateMemoryWithHint(unsigned char*, int, unsigned char**, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./2d/CCTileMapAtlas.cpp:226: error: undefined reference to 'cocos2d::TextureAtlas::increaseTotalQuadsWith(int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./3d/CCBundle3D.cpp:451: error: undefined reference to 'cocos2d::BundleReader::init(char*, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./3d/CCBundle3D.cpp:456: error: undefined reference to 'cocos2d::BundleReader::read(void*, int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./3d/CCBundle3D.cpp:465: error: undefined reference to 'cocos2d::BundleReader::read(void*, int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./3d/CCBundle3D.cpp:484: error: undefined reference to 'cocos2d::BundleReader::read(void*, int, int)'
/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android/../cocos2d/cocos/./3d/CCBundle3D.cpp:497: error: undefined reference to 'cocos2d::BundleReader::read(void*, int, int)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [obj/local/armeabi/libcocos2dcpp.so] Error 1
make: Leaving directory `/Users/to-dev/Desktop/cocos2d-x-3.2/3sCube/proj.android'
Error running command, return code: 2
What do i wrong? Thanks for your help!
t333o
Thanks for all answers and comments!
My Solution was that i reinstall cocos2d-x 3.2 and all the environmental variables.
Thanks!
1) Have you tried to run : cocos run -p android ?
2) Did you check cocos2d lib added to the Android.mk ?
3) You can try to use to the following Makefiles:
Application.mk
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION=clang
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic
APP_DEBUG := $(strip $(NDK_DEBUG))
ifeq ($(APP_DEBUG),1)
APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
APP_OPTIM := debug
else
APP_CPPFLAGS += -DNDEBUG
APP_OPTIM := release
endif
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)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/MenuScene.cpp
LOCAL_CFLAGS := -std=c++11
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)

Link error with Boost on Android

I've successfully built some of the boost-libraries but when I include them in a test project I get link errors.
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile++ thumb : hello-jni <= test.cpp
SharedLibrary : libhello-jni.so
libboost_timer.a(cpu_timer.o): In function `~basic_iostream':
/opt/android-ndk-r7/sources/boost/../../sources/cxx-stl/gnu-libstdc++/include/istream:795: undefined reference to `VTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >'
libboost_timer.a(cpu_timer.o): In function `show_time':
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:61: undefined reference to `VTT for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >'
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:61: undefined reference to `vtable for std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >'
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:61: undefined reference to `vtable for std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >'
libboost_timer.a(cpu_timer.o): In function `boost::timer::format(boost::timer::cpu_times const&, short, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/opt/android-ndk-r7/sources/boost/libs/timer/src/cpu_timer.cpp:177: undefined reference to `std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()'
collect2: ld returned 1 exit status
Application.mk
APP_STL := gnustl_static
APP_CPPFLAGS = -fexceptions
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c test.cpp
LOCAL_STATIC_LIBRARIES := boost_timer, boost_system
LOCAL_LDLIBS := libboost_system.a libboost_timer.a libboost_chrono.a libboost_iostreams.a
include $(BUILD_SHARED_LIBRARY)
$(call import-module,boost)
And test.cpp
#include "test.hpp"
#include <string>
#include <boost/timer/timer.hpp>
void mytest() {
boost::timer::cpu_timer t;
}
we had very similar problem. What helped for us is to add -lgnustl_static at the end of the LOCAL_LDLIBS line in Android.mk. Like this:
LOCAL_LDIBS := -lboost_system .... -lgnustl_static
I think this is because boost libraries depend on STL but don't have it statically compiled in, so it needs to be mentioned explicitly like that.
Also, it seems you don't have to add the APP_STL := gnustl_static line to the Application.mk.

Categories

Resources