【Clion】——搭建C++环境

一、安装GCC


在windows平台下最主要的gcc工具是MinGW和Cygwin。大部分情况下都是推荐下载Cygwin的因为它是一个在windows平台上运行的unix模拟环境

MinGW

64位版本的可以下载Mingw-w64,可以直接百度搜索到。

  1. 通过安装程序安装https://sourceforge.net/projects/mingw-w64/

  2. 直接下载解压版https://sourceforge.net/projects/mingw-w64/files/

里面的选项比如说异常处理机制基本上是无关紧要的,选择Structured Exception Handling( 结构化异常处理 )就可以了, Windows使用自己的异常处理机制


Cygwin

Cygwin的安装程序下载 http://www.cygwin.com/setup-x86_64.exe

在下载时需要选择两个目录

  1. 安装目录

  2. 缓存目录(随便一个就可以了)

然后至少需要下载5个包,都在devles目录下,直接在搜索框里搜索

  • gcc-core
  • gcc-g++
  • make
  • cmake
  • binutils

之后可以指定下载的镜像源,比如说 “163” 和 阿里云 等等的


注意事项

通常因为网络原因

  1. 进不去https://sourceforge.net这个网站
  2. 下载Mingw-64时弹出 “Can not download respository.txt”
  3. 下载Cygwin时没进度、进度不走

连上手机热点就可以了(实测,在不使用任何镜像的情况下联通和电信的热点下载速度都还是挺可以的)

下载好后可以将bin目录加在环境变量中,使用gcc -v或者gcc --version查看版本




二、配置Clion


环境

在settings(设置)中搜索toolchains(工具链)配置gcc环境,通常clion会自动检测到
在这里插入图片描述


工程目录

新建的工程是直接可以运行的,但是我们至少要头文件目录/include/和源文件目录/source/吧。

CmakeLists.txt中添加include_directories(include)指定头文件目录为include/目录

cmake_minimum_required(VERSION 3.15)
project(demo_test)

include_directories(include)

set(CMAKE_CXX_STANDARD 14)

add_executable(demo_test source/main.cpp)

使用Clion也意味着必须要学会如何使用自动化构建工具,推荐一篇博客cmake使用示例与整理总结




JNI——Java与C交互


C编译步骤

参考自C语言程序编译步骤

步骤
预处理 宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除 gcc -E hello.c -o hello.i
编译 检查语法,将预处理后文件编译成汇编文件 gcc -S hello.i -o hello.s
汇编 将汇编文件生成目标文件(二进制文件) gcc -c hello.s -o hello.o
链接 C语言写的程序是需要依赖各种库的,所以编译之后还需要将库链接到最终的可执行程序中 gcc hello.o -o hello

JAVA调用C

JAVA声明native方法并编译为.class文件

public class Hello {
    public static native int staticMethod(int param);
    
    public native void nonstaticMethod();
    
    static {
        System.loadLibrary("Hello");
    }

    public static void main(String[] args) {
        // call static method
        int result = Hello.staticMethod(100);
        System.out.println(result);
        
        // call non-static method
        new Hello().nonstaticMethod();
    } 
}
javac Hello.java

JAVA生成native方法的C头文件

javah Hello

并可以看到在当前目录下生成的Hello.h头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */

#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Hello
 * Method:    staticMethod
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_Hello_staticMethod(JNIEnv*, jclass, jint);

/*
 * Class:     Hello
 * Method:    nonstaticMethod
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_Hello_nonstaticMethod(JNIEnv*, jobject);

#ifdef __cplusplus
}
#endif
#endif

新建Hello.c源文件并实现Hello.h中申明的方法

#include "Hello.h"

JNIEXPORT jint JNICALL Java_Hello_staticMethod(JNIEnv* env, jclass cls, jint param) {
    int result = 0;
    for (int i = 0; i <= param; i++) {
        result += i;
    }
    return result;
}

JNIEXPORT void JNICALL Java_Hello_nonstaticMethod(JNIEnv* env, jobject obj) {
    printf("Successfully called a non-static method implemented by c!\n");
}

Hello.c源文件编译为Hello.dll动态链接库文件。并需要链接两个文件

  • jni.h在JDK的include/目录下
  • jni_md.h在JDK的include/win32/目录下、

如下-I参数是教主链接的路径

gcc -shared -I"D:\jdk\jdk-8\include" -I"D:\jdk\jdk-8\include\win32" Hello.c -o Hello.dll

运行

java Hello

在这里插入图片描述


C调用JAVA

C也是可以通过JNI调用JAVA的,但是比较麻烦而且也不太会有这种需求的出现

原创文章 41 获赞 34 访问量 3万+

猜你喜欢

转载自blog.csdn.net/XY1790026787/article/details/93058590