您好我正在创建一个与JNI一起使用的openssl包装器c库。我的源文件名是rsa.c,JNI头文件名是OpensslRSA.h,它包含在JAVA_HOME / include和JAVA_HOME / include / linux目录中。我使用以下语法来创建此库。
gcc -shared -fpic -o librsa.so -I / usr / local / jdk1.7.0_45 / include -I / usr / local / jdk1.7.0_45 / include / linux rsa.c
此c程序使用以下头文件
#include <jni.h> #include <stdio.h> #include <OpensslRSA.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/rsa.h> #include <openssl/evp.h> #include <openssl/bio.h> #include <openssl/err.h>
但是当我从java程序中使用它时如下所示
java -Djava.library.path = / home / agarwal / test / c_tests / opensslrsalib OpensslRSA
然后它给出了以下错误
java:符号查找错误:/home/agarwal/test/c_tests/opensslrsalib/librsa.so:unfined defined symbol:BIO_new_mem_buf
任何机构都可以让我知道我该怎么做,因为所有使用的头文件都存在于/ usr / include中,因为在c源中使用
答案 0 :(得分:1)
BIO_new_mem_buf位于openssl库中。您必须将图书馆与-lcrypto
(小写字母L)或pkg-config --libs openssl
提供的内容相关联。