Linux x86 环境下编译工具
sudo apt-get install build-essential
gcc –v
g++ -v
make -v
Gcc编译helloworld例子
#include <stdio.h> /*加载标准输入输出函数原型*/
int main(int argc,char * argv[]) /* 主函数,形参暂时不做解释,照着写就可以了 */
{ //{代表函数开始
puts("Hello World!"); //puts函数打印一个字符串,字符串为"Hello World!",记住所有的语句都是以;结束。
return 0; //返回给操作系统0
}//}代表函数结束
//编译
gcc helloworld.c
gcc helloworld.c –o hello
//执行
./hello
给gcc的例子加上Makefile
执行make编译生成可执行文件hello3
~/workspace/gcc_hello$ cat Makefile
hello3:helloworld.o
gcc helloworld.o -o hello3
helloworld.o:helloworld.c
gcc -c -o helloworld.o helloworld.c
G++ helloworld例子
g++ -o hello hello.cpp
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
cout<<"Hello world!"<<endl;
return 0;
}
给g++的例子加上Makefile
~/workspace/g++_hello$ cat Makefile
CC=g++
CCFLAGS = -g -Wall
OBJS = hello.o
SRCS = hello.cpp
all : hello3
hello3 : $(OBJS)
$(CC) $^ -o $@
%.o : %.cpp
$(CC) -c $< $(CCFLAGS)
clean:
rm *.o
$@ 代表目标; $^ 代表所有的依赖对象; $< 代表第一个依赖对象
执行make编译
NDK编译例子
NDK添加环境变量
export NDK_HOME=/home/aa/Android/Sdk/ndk/25.2.9519653
export PATH=$PATH:$NDK_HOME
HelloWorld.c
#include <string.h>
#include <jni.h>
jstring Java_com_lisn_helloworld_HelloWorldActivity_helloWorldFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "HelloWorld! I am from JNI !");
}
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
LOCAL_SRC_FILES:=hello.c
#生成库的名字
LOCAL_MODULE := helloworld
LOCAL_MODULE_TAGS := optional
#生成可执行文件
#include $(BUILD_EXECUTABLE)
#生成动态库
include $(BUILD_SHARED_LIBRARY)
编译命令
Demo/JNI/hello-bin$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk
使用这个库
package com.lisn.helloworld;
public class HelloWorldActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
…
}
public native String helloWorldFromJNI();
static {
System.loadLibrary("HelloWorld");
}
}