У меня небольшая проблема. Я пытаюсь скомпилировать программу Java, взаимодействующую с программой C, которая затем взаимодействует с программой FORTRAN 77. По сути, Java через JNI, используя программу C, которая использует LAPACK (версия FORTRAN)
Программа на C работает сама по себе, взаимодействуя с программой FORTRAN 77 должным образом, но когда я запускаю тестовую программу на Java, связь между Fortran и C нарушается.
Я компилирую программу на C так:
gcc -c -fPIC -I/usr/lib/jvm/java-6-openjdk/include -I/usr/lib/jvm/java-6-openjdk/include/linux -llapack -lblas -lm Optibox.c
gcc -shared -o libOptibox.so Optibox.o
LD_LIBRARY_PATH=./:${LD_LIBRARY_PATH} java Optibox
Возвращает ошибку:
java: symbol lookup error: /home/christian/workspace/testJNI4/libOptibox.so: undefined symbol: dsytrf_
Что вступает в игру из-за этого фрагмента кода:
static long dsytrf(char UPLO, long N, double* A, long LDA, long* IPIV, double* WORK, long LWORK)
{
extern void dsytrf_(char* UPLOp, long* Np, double* A, long* LDAp, long* IPIV, double* WORK, long* LWORKp, long* infop);
long info;
dsytrf_(&UPLO, &N, A, &LDA, IPIV, WORK, &LWORK, &info);
return info;
}
Эта функция отлично работает, если я просто создаю программу на языке C, проверяющую функцию, но при использовании Java LAPACK больше не связывается.
Итак, я предполагаю, что возникает вопрос: как мне сделать правильную ссылку на компилятор Java в этом случае?
РЕДАКТИРОВАТЬ: Я нашел решение, по крайней мере, на данный момент. Я изменил оператор компоновщика, чтобы он также ссылался на сами библиотеки BLAS, LAPACK и MATRIX. Кажется, это полностью решает проблему, но я не уверен в ее элегантности. Я попробую предложенный Idav1s путь к библиотеке.
gcc -shared -o libOptibox.so Optibox.o liblapack.so libblas.so libm.so
Это требовало, чтобы я нашел библиотеки в / usr / lib и скопировал их в свой каталог компиляции, но, по крайней мере, это работает!
Optibox.c
вlibOptibox.so
. - person wallyk   schedule 23.05.2012Java <-> C <-> Fortran
? Ага! Я бы не хотел быть на твоем месте - person slezica   schedule 23.05.2012dsytrf_
реализовано? - person wallyk   schedule 23.05.2012