yagoub
April 14, 2015, 4:30pm
1
i’m using cocos2d-x 3.4 with android-ndk-r10d, and when i run the
cocos run -p android -j 4
i have this problem :
error: 'to_string' is not a member of 'std'
My Application.mk file:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic
ifeq ($(NDK_DEBUG),1)
APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
APP_OPTIM := debug
else
APP_CPPFLAGS += -DNDEBUG
APP_OPTIM := release
endif
Please help me.
Kind regards.
1 Like
Hmm…
I’m still learning cocos2d-x so I my answer might not be the best one…
I’ve encountered that same problem when I tried to run my game (which had std::to_string() on several places).
I solved with that I replaced
std::to_string(val);
with
Value::Value(val).asString();
which works on Android.
I hope that helps… and that someone else can provide a better answer.
I use this on Android, but you could replace the core with Aurioch’s value conversion. You could also use a string formatter instead if you know the value utils::StringUtils::format("%d", 1);
#include <string>
#include <sstream>
namespace std
{
template < typename T > std::string to_string( const T& n )
{
std::ostringstream ss;
ss << n ;
return ss.str() ;
}
}
Edit: added necessary headers
2 Likes
yagoub
April 14, 2015, 8:43pm
4
Thanks, but do i have to put this code in each cpp file?
Yes, but you can put it in a header file and just include that instead. You can then add other templates that you want to use/add.
yagoub
April 14, 2015, 9:35pm
6
i have this error : Use of undeclared identifier 'to_string'; did you mean 'std::to_string'?
yagoub
April 14, 2015, 9:54pm
7
i have added using namespace std;, and now i have this error:
FATAL:/aaa/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs/cocos2dcpp_shared/hellocpp/main.o] Error 1
make: *** Waiting for unfinished jobs....
FATAL:/aaa/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs/cocos2dcpp_shared/__/__/Classes/SplashScreen.o] Error 1
FATAL:/aaa/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs/cocos2dcpp_shared/__/__/Classes/AppDelegate.o] Error 1
Looks like an issue with the android setup. I take it that it compiles/builds/runs fine before you added the to_string method and template?
Here’s a quick search result
ios, gnu, assembly
yagoub
April 14, 2015, 10:48pm
9
it worked fine with NDK 9, but now with NDK 10, i can’t compiles/builds/runs before and after. it just stops in the beginning.
iQD
April 15, 2015, 1:01am
10
Try the following configuration:
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang
1 Like
yagoub
April 15, 2015, 8:17am
12
I tried to run the cpp-empty-test, and i have have the same error:
FATAL:/aaa/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
Sounds like there’s a fundamental issue in your build system or toolchain.
What version of XCode do you have?
What’s your Android.mk look like?
Can you paste in the entire log from cocos compile?
yagoub
April 15, 2015, 8:38am
14
i’m using Xcode Version 6.2 (6C131e)
My Android.mk is not important, since i had the same error when i tried to run cpp-empty-test.
cocos compile log:
yagoubs-Mac-Pro:MyGame yagoub$ cocos compile -p android -j 4
Running command: compile
Building mode: debug
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update project -t android-10 -p /MyProjects/MyGame/proj.android'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/proguard-project.txt
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update lib-project -p /MyProjects/MyGame/proj.android/../../../../Documents/DEV/adt-bundle-mac-x86_64-20140321/sdk/extras/google/play_apk_expansion/downloader_library -t android-15'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/../../../../Documents/DEV/adt-bundle-mac-x86_64-20140321/sdk/extras/google/play_apk_expansion/downloader_library/proguard-project.txt
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update lib-project -p /MyProjects/MyGame/proj.android/../../../../Documents/DEV/adt-bundle-mac-x86_64-20140321/sdk/extras/google/play_apk_expansion/zip_file -t android-15'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/../../../../Documents/DEV/adt-bundle-mac-x86_64-20140321/sdk/extras/google/play_apk_expansion/zip_file/proguard-project.txt
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update lib-project -p /MyProjects/MyGame/proj.android/../../../../Documents/DEV/adt-bundle-mac-x86_64-20140321/sdk/extras/google/play_licensing/library -t android-15'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/../../../../Documents/DEV/adt-bundle-mac-x86_64-20140321/sdk/extras/google/play_licensing/library/proguard-project.txt
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update lib-project -p /MyProjects/MyGame/proj.android/../cocos2d/plugin/plugins/googleplay/proj.android -t android-10'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/../cocos2d/plugin/plugins/googleplay/proj.android/proguard-project.txt
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update lib-project -p /MyProjects/MyGame/proj.android/../cocos2d/plugin/protocols/proj.android -t android-10'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/../cocos2d/plugin/protocols/proj.android/proguard-project.txt
Android platform not specified, searching a default one...
running: 'Dev/adt-bundle-mac-x86_64-20140321/sdk/tools/android update lib-project -p /MyProjects/MyGame/proj.android/../cocos2d/cocos/platform/android/java -t android-10'
Updated project.properties
Updated local.properties
Updated file /MyProjects/MyGame/proj.android/../cocos2d/cocos/platform/android/java/proguard-project.txt
building native
NDK build mode: debug
NDK_TOOLCHAIN_VERSION: 4.9
running: '/Dev/android-ndk-r10d-darwin-x86_64/android-ndk-r10d/ndk-build -C /MyProjects/MyGame/proj.android -j4 NDK_MODULE_PATH=/MyProjects/MyGame/proj.android/../cocos2d:/MyProjects/MyGame/proj.android/../cocos2d/cocos:/MyProjects/MyGame/proj.android/../cocos2d/external NDK_TOOLCHAIN_VERSION=4.9 NDK_DEBUG=1'
make: Entering directory `/MyProjects/MyGame/proj.android'
[armeabi] Compile++ thumb: cocos2dcpp_shared <= main.cpp
[armeabi] Compile++ thumb: cocos2dcpp_shared <= AppDelegate.cpp
[armeabi] Compile++ thumb: cocos2dcpp_shared <= OptionScene.cpp
[armeabi] Compile++ thumb: cocos2dcpp_shared <= SplashScreen.cpp
FATAL:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/hellocpp/main.o] Error 1
make: *** Waiting for unfinished jobs....
FATAL:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/__/__/Classes/AppDelegate.o] Error 1
FATAL:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/__/__/Classes/SplashScreen.o] Error 1
FATAL:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as: I don't understand 'm' flag!
make: *** [obj/local/armeabi/objs-debug/cocos2dcpp_shared/__/__/Classes/OptionScene.o] Error 1
make: Leaving directory `/MyProjects/MyGame/proj.android'
Ndk build failed!
yagoubs-Mac-Pro:MyGame yagoub$
i’m using cocos2d-x 3.4, android-ndk-r10d and mac os x 10.9 mavericks.
iQD
April 15, 2015, 12:48pm
16
You have to look into your NDK folder and search for the make files, which set -mcpu= and replace it with -arch.
E.g. replace -mcpu=arm with -arch arm
Or try to override it, by adding -arch arm to the APP_CPPFLAGS in your make file.
as is the assembler.
yagoub
April 15, 2015, 1:50pm
17
i tried it, and my Application.mk file looks like this:
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char -arch arm
APP_LDFLAGS := -latomic
ifeq ($(NDK_DEBUG),1)
APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
APP_OPTIM := debug
else
APP_CPPFLAGS += -DNDEBUG
APP_OPTIM := release
endif
and i have this log
make: Entering directory `MyProjects/MyGame/proj.android'
[armeabi] Compile++ thumb: cocostudio_static <= WidgetReader.cpp
arm-linux-androideabi-g++: error: arm: No such file or directory
arm-linux-androideabi-g++: error: unrecognized command line option '-arch'
make: *** [obj/local/armeabi/objs-debug/cocostudio_static/WidgetReader/WidgetReader.o] Error 1
make: *** Waiting for unfinished jobs....
make: Leaving directory `MyProjects/MyGame/proj.android'
Ndk build failed!
iQD
April 15, 2015, 2:09pm
18
There is some issue with your settings and tool chain, as you see in the log, that it’s not using clang, but arm-linux-androideabi-g++. -arch is only working with clang.
Check why it’s using g++ despite the clang setting.
Check the content of NDK_TOOLCHAIN_VERSION. It seems it’s set elsewhere,
Make a clean build and make sure the environment variables are set to the correct values.
yagoub
April 15, 2015, 2:46pm
19
The NDK_TOOLCHAIN_VERSION is empty, how to set it to clang
iQD
April 15, 2015, 3:15pm
20
You need to set different variables, when using a different tool-chain.
First check, which tool-chains you have installed on your system.
They are located in:
<your NDK folder>\toolchains
Then look up the ABIs supported by that toolchain. They are defined in the config.mk file of the tool-chain.
E.g. TOOLCHAIN_ABIS := armeabi armeabi-v7a armeabi-v7a-hard for arm-linux-androideabi-clang3.5.
Then you have to define the ABI and the tool-chain in Application.mk:
E.g.
APP_ABI := armeabi
NDK_TOOLCHAIN := arm-linux-androideabi-clang3.5
This will use clang3.5 for generating armeabi code.
Keep in mind, that you have to define APP_ABI, or it will not be recognized!
Also be prepared for code generating errors, as clang is more pedantic than g++.
E.g. compiling RakNet. g++ will compile the source, but clang won’t, as RakNet does things like comparison between pointer and integer. This will be okay for g++, but not for clang/llvm!
You have to write GOOD code, when compiling with clang/llvm
Warnings should be treated as errors anyway.