我有大量的C++代碼需要在Android上運行。
此代碼編譯與Visual C++編譯器,但它不編譯與gcc(它由Android NDK
使用)。 問題是,源代碼包含很多在gcc下生成錯誤的部分。是否有可能根據VC++
編譯源代碼並使其在Android上運行? 謝謝。有什麼方法可以將Visual C++代碼編譯到Android?
回答
運行原生C/C++代碼在java(和Android)中的唯一方法是使用JNI (Java Native Interface)。
這是迄今爲止,幫助您與Android Studio
設置JNI最好的教程和Android NDK
:http://ph0b.com/new-android-studio-ndk-support/
你的情況,你要提取您的C源代碼++項目(即所有的.cpp; .h; .hpp files),並將它們添加到JNI文件夾中(一旦您使用上述教程(或任何其他指南)設置好JNI環境後,只要您正確包含該庫,Gradle就會編譯它們。
注:
- 你不需要一個Makefile:改用CFLAGS在搖籃建立文件;
- 確保正確理解JNI,以便創建將您的本地代碼與您的java代碼鏈接的正確頭文件;
我希望它有幫助!
謝謝!如果我使用Java NDK(如你所說),那麼這意味着我使用GCC。但是代碼不能在GCC下編譯。我試圖找到一種解決方法,而不是修改源代碼以使其在GCC下編譯。 –
的確,Android NDK使用GCC。編譯錯誤是什麼?你有Makefile嗎?我不是很瞭解C++,但如果可能的話,我可以幫助你。 – Mackovich
由於非標準源代碼有很多錯誤......真的很多。只是其中幾個例如: [陰影](http://stackoverflow.com/questions/20875033/clang-vs-vcerror-declaration-of-t-shadows-template-parameter); **缺少typename錯誤**; ** std ::異常錯誤**; [額外資質](http://stackoverflow.com/questions/5642367/extra-qualification-error-in-c) 依此類推。我已經修好了一對,但似乎沒完沒了。 –
- 1. 有沒有什麼方法可以在運行時編譯C++代碼?
- 2. 將C代碼編譯爲Visual C++ dll?
- 3. 有什麼方法可以用android NDK編譯libuv嗎?
- 4. C代碼在Visual Studio中編譯成什麼彙編語言?
- 5. Visual C++ 2008 Express Edition可以編譯C源代碼嗎?
- 6. 爲什麼gcc可以編譯C++代碼但不能鏈接?
- 7. 有什麼方法可以優化此C#代碼?
- 8. 有什麼方法可以結合這個C#代碼嗎?
- 9. 以編程方式調用C#編譯器編譯C#代碼
- 10. 有沒有一種方法可以使用我的C#代碼編譯Javascript?
- 11. 編譯代碼和可執行代碼有什麼區別?
- 12. 是否有可能將C代碼編譯爲Javascript代碼?
- 13. 爲什麼我的Visual Studio 2013是C++代碼編譯
- 14. 爲什麼這個C++代碼編譯?它有什麼作用?
- 15. 在Visual C++ Express中編譯C代碼
- 16. 這個C代碼爲什麼編譯?
- 17. C++:爲什麼代碼正在編譯
- 18. 爲什麼此代碼無法在Visual Studio 2010中編譯?
- 19. 有什麼方法可以反編譯grails/groovy jar文件嗎?
- 20. Vala和Genie之間有什麼方法可以編譯?
- 21. 有什麼方法可以反編譯Linux .so?
- 22. 有沒有什麼辦法可以編寫簡潔的代碼?
- 23. 有什麼方法可以替代Response.Write?
- 24. 我無法編譯此java代碼,有人可以告訴爲什麼嗎?
- 25. C代碼將無法編譯
- 26. C代碼編譯
- 27. 編譯C代碼爲C#
- 28. 有沒有什麼方法可以縮短這個代碼呢?
- 29. 無法編譯c代碼
- 30. Microsoft Visual C++ Express編譯器是否編譯C代碼?
*在gcc下生成錯誤*好像代碼使用了一些MS擴展(或windows庫)...然後回答是否... – Selvin
謝謝!不,它不使用任何這些。錯誤的根源在於源代碼不遵循C++標準,但gcc確實如此。 –