【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的,但是比較麻煩而且也不太會有這種需求的出現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章