Closed jonnyijapan closed 9 years ago
I put android-ndk-r10d back for now...
Rebuilding seems ok, but later when make
ing the Android project:
[armeabi] Compile++ thumb: cocos2djs_shared <= main.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= AppDelegate.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= Game.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= GameScene.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= MenuScene.cpp [armeabi] Compile thumb : cpufeatures <= cpu-features.c [armeabi] StaticLibrary : libcpufeatures.a [armeabi] SharedLibrary : libcocos2djs.so /Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::networkThread()'
... lots mots multiple definition errors...
collect2: error: ld returned 1 exit status make[1]: *\ [obj/local/armeabi/libcocos2djs.so] Error 1
Just got internet again. I believe it's because there's some other environment variables you should set after changing the NDK. Try this: https://htmlpreview.github.io/?https://github.com/NatWeiss/RapidGame/blob/master/templates/cocos2dx/TwoScene/Projects/android/README.html#setup-environment-variables-
On Wed, Jul 15, 2015 at 8:02 AM, jonnyijapan notifications@github.com wrote:
I put android-ndk-r10d back for now...
— Reply to this email directly or view it on GitHub https://github.com/NatWeiss/RapidGame/issues/21#issuecomment-121500269.
When you get a multiple definition error, can I see your project directory? Can you take a screenshot?
I just created the project with rapidgame create cocos2dx "testgame2" com.test.testgame2
Hmmm, never encountered this error before. I imagine something went wrong with prebuilding the libraries then. The simplest solution would be to delete the prebuilt libraries and object files and try prebuliding the Android project again. But you should have already been able to build the libraries for iOS and Mac. Because of this, can you test the Mac project for example and see if it builds and runs just so we can be sure there's no other errors going on?
Yep I could build and launch and play the Mac project right now.
Okay, so we can isolate the problem to just the Android libraries. Can you navigate to rapidgame/0.9.9/cocos2d/x/lib
and delete both Android folders? You also should delete rapidgame/src/proj.android/libs
and rapidgame/src/proj.android/obj
, then run rapidgame prebuild android
, and hopefully that should fix the problem.
You can find these directories in ~/Library/Developer/RapidGame
and /usr/local/lib/node_modules/rapidgame
.
I rebuilt it all (deleted everything in symlinked libs), and create a new project with rapidgame create cocos2dx "testgame4" jp.mjgarage.testgame4
, but when making the android project it fails the same way as above.
Complete error log is
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::networkThread()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::dispatchResponseCallbacks()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::getInstance()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::HttpClient()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::destroyInstance()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x8664/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::enableCookies(char const)'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::setSSLVerification(std::string const&)'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::HttpClient()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'vtable for cocos2d::network::HttpClient'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::~HttpClient()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::~HttpClient()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::~HttpClient()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::lazyInitThreadSemphore()'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x8664/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::send(cocos2d::network::HttpRequest)'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x8664/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'cocos2d::network::HttpClient::sendImmediate(cocos2d::network::HttpRequest)'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'typeinfo for cocos2d::network::HttpClient'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient.o): multiple definition of 'typeinfo name for cocos2d::network::HttpClient'
/Applications/android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x8664/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(HttpClient-android.o): previous definition here
jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(CCNodeReader.o):CCNodeReader.cpp:function cocostudio::timeline::NodeReader::loadNode(rapidjson::GenericValuerapidjson::UTF8<char, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator > const&): error: undefined reference to 'cocos2d::ui::Widget::getPositionPercent() const'
jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(CCNodeReader.o):CCNodeReader.cpp:function cocostudio::timeline::NodeReader::loadNode(rapidjson::GenericValuerapidjson::UTF8<char, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator > const&): error: undefined reference to 'cocos2d::ui::Widget::getPositionPercent() const'
collect2: error: ld returned 1 exit status
make[1]: ** [obj/local/armeabi/libcocos2djs.so] Error 1
make[1]: Leaving directory `/Users/jonny/temp/rapidgameegaujujx/testgame4/Projects/android'
Traceback (most recent call last):
File "./build_native.py", line 179, in
I'll have to take a look at this closer when I get home.
You could potentially try adding
LOCAL_LDFLAGS := -Wl,--allow-multiple-definition
To any place in testgame4/Projects/android/jni/Android.mk
after line 16 and before line 70.
Editing Android.mk , I now get:
ANDROID_SDK_ROOT=/Applications/android/sdk
PLUGIN_DIR=/Users/jonny/temp/rapidgameegaujujx/testgame4/lib/cocos2d/x/java
export CONFIG="debug" && ./build_native.py
The Selected NDK toolchain version was 4.8 !
APP_PLATFORM=android-9
APP_OPTIM=debug
CONFIG=Debug
ARCH=armeabi
APP_CPPFLAGS=-frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char -DCOCOS2D_JAVASCRIPT -DCOCOS2D_DEBUG=1
make[1]: Entering directory /Users/jonny/temp/rapidgameegaujujx/testgame4/Projects/android' [armeabi] Compile++ thumb: cocos2djs_shared <= main.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= AppDelegate.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= Game.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= GameScene.cpp [armeabi] Compile++ thumb: cocos2djs_shared <= MenuScene.cpp [armeabi] Compile thumb : cpufeatures <= cpu-features.c [armeabi] StaticLibrary : libcpufeatures.a [armeabi] SharedLibrary : libcocos2djs.so jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(CCNodeReader.o):CCNodeReader.cpp:function cocostudio::timeline::NodeReader::loadNode(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > const&): error: undefined reference to 'cocos2d::ui::Widget::getPositionPercent() const' jni/../../../lib/cocos2d/x/lib/Debug-Android/armeabi/libcocos2dx-prebuilt.a(CCNodeReader.o):CCNodeReader.cpp:function cocostudio::timeline::NodeReader::loadNode(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > const&): error: undefined reference to 'cocos2d::ui::Widget::getPositionPercent() const' collect2: error: ld returned 1 exit status make[1]: *** [obj/local/armeabi/libcocos2djs.so] Error 1 make[1]: Leaving directory
/Users/jonny/temp/rapidgameegaujujx/testgame4/Projects/android'
Traceback (most recent call last):
File "./build_native.py", line 179, in
I found this issue: https://github.com/NatWeiss/RapidGame/issues/15 It looks partly related... The thing is I did actually install RapidGame awhile back but ended up never using it for a recent project. And now I'm trying it out again. In the folder where 0.9.9 is, there was another one like 0.9.2 or so. I wipe those directories like you suggested in that other issue and am now installing rapid game from scratch again, and am now creating testgame5, which is currently downloading cocos2d-js-v3.6.zip again... my connection is pretty slow so this will take awhile. Guess it will prebuild again too, that takes a while on my box too :-/ Nonetheless if this works in the end, build times should be fast... right.. :-)
Guess what - that fixed it. I dunno what happened, but that old installation messed things up. I didn't even have to edit Android.mk this time, and this is using cocos2d-x 3.6. Thanks for your help :+1:
Yeah for sure! If you would've told me there was an old installation, that would've helped a lot. In any case, I'm so glad you got everything working :) And yeah, you shouldn't need to edit Android.mk at all. It should work out of the box.
Btw, it takes around 2 hours to build all the libraries on my machine. By you only need to do it once.
Good luck!
Also, did you get it working with NDKr10e?
I'm back on NDKr10d now and haven't tried 10e. I guess upgrading will likely not work without doing a manual reinstall like above... it just takes a lot of time to recompile everything so I'll leave that for now.
I installed rapidgame from scratch on another box - it works fine with NDKr10e.
I think you can get the newest NDK working without reinstalling RapidGame and/or prebuilding the libraries again. I believe the error you got was because you only changed the NDK_ROOT
environment variable without also updating your PATH
(as PATH
must contain /path/to/ndk
). You can experiment and see if this works by pointing NDK_ROOT
to NDKr10e and editing PATH
(removing the path to the old NDK and adding the path to the new one) and then trying to build the Android project, as it relies on both these variables having the proper values. That should fix your problem. If the Android project compiles, then you've successfully switched over while only having to edit two environment variables. If not, you can always change back to r10d.
I guess you are right. Without even prebuilding Android again, my Android project just built successfully with NDKr10e.
Good to hear :) That should mean that your NDK is properly setup to use the newest version.
I did just update to the latest NDK version, and made sure to update the NDK_ROOT to reflect the new path.
But now when I do
rapidgame prebuild android --verbose
I getIt looks like it looks at the old path, for the old NDK. The current one is at /Applications/android/android-ndk-r10e. How do I fix this - reinstall RapidGame?