導航:首頁 > 源碼編譯 > ndk命令行用cmake編譯

ndk命令行用cmake編譯

發布時間:2022-01-23 06:21:11

『壹』 怎麼用Cmake編譯OGRE SDK

一看就知道是沒有自己嘗試過了解相關知識的。先去了解makefile然後了解cmake再去了解ogre
sdk最後,你就知道怎麼做了。

『貳』 android studio怎樣進行ndk編譯

1、新建一個Android工程,這一步就不多說了;
2、在AndroidStudio中配置NDK路徑,方法是:
(1)先下載NDK並安裝(這句基本是廢話);
(2)點菜單欄的File->ProjectStructure…->在打開的窗口中左側選中SDKLocation->在右側Android NDK Location中填入NDK目錄所在路徑
3、編譯生成.class文件,方法是:
點菜單欄的Build->Make Project
這時,在工程的app/build/intermediates下就會生成classes文件夾,打開classes目錄下的debug目錄就會看到以你的包名命名的各級文件夾,最里邊文件夾下有你的java類對應的.class文件;
4、確定你要引用本地方法的類:
其實你也可以先生成jni目錄,再去創建這個類,但是先Google顯然建議先創建要引用C代碼的Java類,因為AndroidStudio可以根據你在java類中定義的native方法的名稱來自動生成.h頭文件。
比如你想在MainActivity中引用本地方法,那麼你先用
static {
System.loadLibrary("myNativeLib");
}
來聲明本地代碼庫,然後定義幾個natvie方法,比如
public native String getStringFromNative();
5、使用javah命令行生成jni目錄及對應的頭文件:
我用的是AndroidStudio 2.1.1,在主界面最下邊就能找到Terminal,點一下就能打開系統的命令行工具,並且已經為你自動cd到當前工程所在目錄
6、配置build.gradle文件
這里的build.gradle是指app模塊下的build.gradle,不是整個工程的build.gradle文件。在模塊的build.gradle的defaultConfig下加入以下idk配置:

ndk {
moleName"myNativeLib"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
7、配置local.properties文件
打開工程目錄下的local.properties,感覺這一步是自動配置的,或者說在你一開始在AndroidStudio中指定NDK目錄時已經自動生成了。我的AndroidStudio在打開local.properties已經有了
ndk.dir=/Develop/Android/android-ndk-r10e
這一行,所以就不用配了;
8、配置gradle.properties
打開工程目錄下的gradle.properties文件(注意不是build.gradle,而是gradle.properties),在文件的最後一行加入
android.useDeprecatedNdk=true
這句的作用是允許我們使用已經過時的NDK版本,不知道AndroidStudio要求使用哪個版本的NDK才不會報錯,總之只要配置了這一句就可以使用比較舊的NDK版本了,我用的r10;
至此我們在AndroidStudio中就完成了NDK環境的配置,接下來就可以寫Native代碼了;
9、寫一個.c文件測試一下是否運行正常
(1)在我們之前生成src/main/jni目錄下新建一個.c文件,方法是在jni文件夾上點滑鼠右鍵,選擇New->C/C++ Source File,然後在彈出的對話框中填入.c或.cpp文件的文件名就可以了,比如說mail.c

『叄』 ndk-build怎麼在命令行里寫

打開cmd,進入androidndkr9所在的文件夾,執行命令:ndk-build-C[path]就可以了,path是你的工程路徑。這樣就會生成.so文件的

『肆』 android開發,怎麼使用ndk編譯成.so文件

一、首先下載android-ndk,官方網站是:http://developer.android.com/tools/sdk/ndk/index.html
目前最新的版本是android-ndk-r8e-windows-x86.zip,下載地址:
http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86.zip
下載後把壓縮解壓出來,例如:D:\ndk,目錄下的ndk-build.cmd就是用來編譯的批處理命令。
二、編譯,打開cmd命令行窗口,cd進入目錄:D:\ndk\samples\hello-jni,
然後執行命令:D:\ndk\ndk-build.cmd(如果設置過環境變數則直接使用ndk-build.cmd)來編譯hello-jni,如果沒有錯誤會輸出:
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
"Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
三、創建android應用程序並使用so文件
打開eclipse創建一個android應用程序HelloJni,默認的com.example.hellojni包下面有一個MainActivity.java,
在此包下添加一個HelloJni.java,

『伍』 如何使用CMake進行交叉編譯

cmake交叉編譯配置

很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程序。裡面牽扯到相關頭文件的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關CMake在面對交叉編譯的時候,需要做的一些准備工作。

CMake給交叉編譯預留了一個很好的變數CMAKE_TOOLCHAIN_FILE,它定義了一個文件的路徑,這個文件即toolChain,裡面set了一系列你需要改變的變數和屬性,包括C_COMPILER,CXX_COMPILER,如果用Qt的話需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的話需要更改的BOOST_ROOT(具體查看相關Findxxx.cmake裡面指定的路徑)。CMake為了不讓用戶每次交叉編譯都要重新輸入這些命令,因此它帶來toolChain機制,簡而言之就是一個cmake腳本,內嵌了你需要改變以及需要set的所有交叉環境的設置。

toolChain腳本中設置的幾個重要變數

1.CMAKE_SYSTEM_NAME:

即你目標機target所在的操作系統名稱,比如ARM或者Linux你就需要寫"Linux",如果Windows平台你就寫"Windows",如果你的嵌入式平台沒有相關OS你即需要寫成"Generic",只有當CMAKE_SYSTEM_NAME這個變數被設置了,CMake才認為此時正在交叉編譯,它會額外設置一個變數CMAKE_CROSSCOMPILING為TRUE.

2. CMAKE_C_COMPILER:

顧名思義,即C語言編譯器,這里可以將變數設置成完整路徑或者文件名,設置成完整路徑有一個好處就是CMake會去這個路徑下去尋找編譯相關的其他工具比如linker,binutils等,如果你寫的文件名帶有arm-elf等等前綴,CMake會識別到並且去尋找相關的交叉編譯器。

3. CMAKE_CXX_COMPILER:

同上,此時代表的是C++編譯器。

4. CMAKE_FIND_ROOT_PATH:

指定了一個或者多個優先於其他搜索路徑的搜索路徑。比如你設置了/opt/arm/,所有的Find_xxx.cmake都會優先根據這個路徑下的/usr/lib,/lib等進行查找,然後才會去你自己的/usr/lib和/lib進行查找,如果你有一些庫是不被包含在/opt/arm裡面的,你也可以顯示指定多個值給CMAKE_FIND_ROOT_PATH,比如

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

該變數能夠有效地重新定位在給定位置下進行搜索的根路徑。該變數默認為空。當使用交叉編譯時,該變數十分有用:用該變數指向目標環境的根目錄,然後CMake將會在那裡查找。

5. CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:

對FIND_PROGRAM()起作用,有三種取值,NEVER,ONLY,BOTH,第一個表示不在你CMAKE_FIND_ROOT_PATH下進行查找,第二個表示只在這個路徑下查找,第三個表示先查找這個路徑,再查找全局路徑,對於這個變數來說,一般都是調用宿主機的程序,所以一般都設置成NEVER

6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:

對FIND_LIBRARY()起作用,表示在鏈接的時候的庫的相關選項,因此這里需要設置成ONLY來保證我們的庫是在交叉環境中找的.

7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

對FIND_PATH()和FIND_FILE()起作用,一般來說也是ONLY,如果你想改變,一般也是在相關的FIND命令中增加option來改變局部設置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

8. BOOST_ROOT:

對於需要boost庫的用戶來說,相關的boost庫路徑配置也需要設置,因此這里的路徑即ARM下的boost路徑,裡面有include和lib。

9. QT_QMAKE_EXECUTABLE:

對於Qt用戶來說,需要更改相關的qmake命令切換成嵌入式版本,因此這里需要指定成相應的qmake路徑(指定到qmake本身)

toolChain demo

# this is required
SET(CMAKE_SYSTEM_NAME Linux)

# specify the cross compiler
SET(CMAKE_C_COMPILER /opt/arm/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_74xx /home/rickk/arm_inst)

# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# configure Boost and Qt
SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
SET(BOOST_ROOT /opt/boost_arm)

這樣就完成了相關toolChain的編寫,之後,你可以靈活的選擇到底採用宿主機版本還是開發機版本,之間的區別僅僅是一條-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做轉移,但目標平台是同一個,你僅僅需要寫一份toolChain放在一個地方,就可以給所有工程使用。

『陸』 如何在cmake3.7.2中將ndk-toolchain的編譯器設置為gcc和g++

不過,我個人覺得直接指定編譯器就可以了。通過修改兩個變數c_compiler和cxx_compiler就可以了 .具體的話網路吧。

『柒』 如何運行cmake編譯後的c代碼

你機子的某個盤里建一個新的文件夾,如我這里的完整路徑是:D:\CMake\CMake-Study\HelloCMake;
然後在HelloCMake文件夾里建立一個HelloCMake.cpp文件,裡面的代碼如下:
#include
int
main()
{
std::cout

『捌』 用Cmake編譯的c++程序怎麼打包

使用opencv需要編譯源碼,得到庫文件。可以用cmake構建項目後編譯,也可以直接用官方提供的編譯好的版本。
官方提供的編譯庫一般只是標准版本,沒有附加某些庫,比如tbb等,要想讓opencv使用tbb等庫,就只能自己構建項目後編譯。
當然,一般使用的話,用官方提供的庫即可。OpenCV2.3.1版本就提供編譯好的庫,可以直接設置使用。

『玖』 如何在命令行下使用Android NDK交叉編譯工具

命令後要跟源文件名,原文件要在當前目錄下,還要在$PATH中指定交叉編譯工具鏈的位置。

『拾』 cmake 在Windows 命令行怎麼指定編譯器

CMake是一個比make更高級的編譯配置工具,它可以根據不同平台、不同的編譯器,生成相應的Makefile或者vcproj項目。
通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建項目生成目標文件,還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平台的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,只要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。
如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。
總之,CMake是一個非常強大的編譯自動配置工具,支持各種平台,KDE也是用它編譯的,感興趣的可以試用一下。

准備活動:
(1)安裝cmake。
下載地址:http://www.cmake.org/cmake/resources/software.html
根據自己的需要下載相應的包即可,Windows下可以下載zip壓縮的綠色版本,還可以下載源代碼。
Windows下CMake的使用
(2)運行cmake的方法。(GUI、命令行)
http://www.cmake.org/cmake/help/runningcmake.html

CMake使用步驟:
運行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
執行Configure:
運行之後,生成了如下文件:
Windows下CMake的使用
生成Makefile:
執行Generate之後生成如下文件:
Windows下CMake的使用
運行make進行編譯:
Windows下CMake的使用
編譯完成後,在build目錄生成Tutorial.exe,運行Tutorial.exe 25就可以看到運行結果:
Windows下CMake的使用
運行make install安裝程序:
Windows下CMake的使用
運行make test進行測試:
Windows下CMake的使用

通過cmake tutorial學習CMake配置方法
http://www.cmake.org/cmake/help/cmake_tutorial.html
可以在源代碼的Tests/Turorial目錄中找到這個手冊對應的代碼。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用編譯產生的Turorial.exe,可先看下前面「CMake使用步驟」的說明,它以Step4為例詳細介紹了使用過程,Step1的配置可能不夠完全,比如無法運行make install,無法運行make test,但可以參考。)
簡單的程序編譯。
(1)運行GUI的cmake,指定要編譯的源代碼路徑和二進制文件路徑(會自動創建)。
Windows下CMake的使用
(2)點擊Configure,配置成功後,再點擊Generate。
配置需要選擇合適的編譯器,雖然我安裝了VC2008,但沒有配置成功;選擇Unix Makefiles,配置成功,它自動找到了DevC++下的gcc.exe等編譯器。
Windows下CMake的使用
(3)在build3目錄執行make,就能夠編譯生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以運行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目錄編譯為庫,並且鏈接到最終的可執行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目錄MathFunctions也能被編譯

# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
產生makefile:
在GUI上點擊Configure,之後Generate還是灰色,再次點擊Configure,Generate就可以點擊了。
編譯:

閱讀全文

與ndk命令行用cmake編譯相關的資料

熱點內容
h264編碼器源碼 瀏覽:664
有什麼辦法翻錄加密視頻 瀏覽:666
java數據結構與演算法面試題 瀏覽:977
解壓不了是什麼意思 瀏覽:359
紐西蘭編程師年薪 瀏覽:321
程序員為什麼大多生閨女 瀏覽:51
c編程用英文還是中文 瀏覽:723
一點都不解壓的游戲 瀏覽:203
解壓為什麼不能用中文文件夾 瀏覽:615
伺服器如何解除備份 瀏覽:144
安卓手機為什麼用一年就變卡 瀏覽:11
如何用風變編程自動回復 瀏覽:512
安卓閱讀幣怎麼樣 瀏覽:437
京東app怎麼切號 瀏覽:583
進入傳奇伺服器後如何修改 瀏覽:42
m0單片機的cycle怎麼知道 瀏覽:806
linux命令太長 瀏覽:782
壓縮機nb1111y是多少w 瀏覽:45
打賞視頻用什麼伺服器好 瀏覽:154
方舟好友伺服器怎麼加mod 瀏覽:982