我想调用一个使用java中的cpp
的本地fftw3
库。我的java类如下:
/* FourierGui.java */
public class FourierGui {
native void fourierFromC();
static {
System.loadLibrary("fourier");
}
static public void main(String argv[]) {
FourierGui ft = new FourierGui();
ft.fourierFromC();
}
}
我的cpp
库是
/* fourier.cpp */
#include <jni.h>
#include <stdio.h>
#include <cmath>
#include <complex>
#include "fftw3.h"
#include <stdlib.h>
using namespace std;
JNIEXPORT void JNICALL Java_FourierGui_fourierFromC (JNIEnv * env, jobject jobj) {
// something that uses fftw3
}
我创建了lybrary:
g++ -o libfourier.so -shared fourier.cpp -lc
但是当我用
运行java类时java -Djava.library.path="/path/to/lib/" FourierGui
我收到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/red/Scrivania/JNI/libfourier.so: /path/to/lib/libfourier.so: undefined symbol: fftw_plan_dft_1d
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at FourierGui.<clinit>(FourierGui.java:10)
我还尝试在libfftw3.so
中添加java.library.path
的路径,但我得到了相同的错误。它似乎无法找到最后一个库..(如果我自己编译并运行cpp
代码,它没有错误......)
我知道有fftw3的java包装器,但我想自己做这个
答案 0 :(得分:0)
我明白了......编译fftw3
文件时,我必须链接cpp
库:
g++ -o libfourier.so -shared fourier.cpp -lc -lfftw3