Java中如何調(diào)用C或C++程序
Java調(diào)用C或C++的程序通常需要使用Java Native Interface(JNI)技術(shù)。下面分別給出Java調(diào)用C和C++的例子。
Java調(diào)用C程序的例子
下面是一個(gè)簡(jiǎn)單的Java調(diào)用C程序的例子,其中C程序?qū)崿F(xiàn)了一個(gè)簡(jiǎn)單的加法函數(shù):
編譯上述C代碼生成動(dòng)態(tài)鏈接庫(kù)(dll或so文件),例如:
下面是Java代碼,其中使用JNI庫(kù)加載動(dòng)態(tài)鏈接庫(kù),并調(diào)用其中的add方法:
在Java代碼中,通過(guò)System.loadLibrary()方法加載生成的動(dòng)態(tài)鏈接庫(kù),然后通過(guò)native方法調(diào)用其中的add函數(shù)。
Java調(diào)用C++程序的例子
Java調(diào)用C++程序的過(guò)程與調(diào)用C程序類似。下面是一個(gè)簡(jiǎn)單的Java調(diào)用C++程序的例子,其中C++程序?qū)崿F(xiàn)了一個(gè)簡(jiǎn)單的乘法函數(shù):
在C++中,由于函數(shù)名可能會(huì)被編譯器進(jìn)行名稱修飾,因此需要使用extern "C"語(yǔ)句來(lái)聲明函數(shù)為C語(yǔ)言風(fēng)格的函數(shù)。
編譯上述C++代碼生成動(dòng)態(tài)鏈接庫(kù),例如:
下面是Java代碼,其中使用JNI庫(kù)加載動(dòng)態(tài)鏈接庫(kù),并調(diào)用其中的multiply方法:
在Java代碼中,通過(guò)System.loadLibrary()方法加載生成的動(dòng)態(tài)鏈接庫(kù),然后通過(guò)native方法調(diào)用其中的multiply函數(shù)。注意,在Java代碼中仍然需要聲明C++函數(shù)為C語(yǔ)言風(fēng)格的函數(shù)。