创建 c linux 库的问题
issues in creating c linux library
您好,我正在创建一个与 JNI 一起使用的 openssl 包装器 c 库。我的 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:未定义符号:BIO_new_mem_buf
任何人都可以让我知道我应该怎么做,因为所有使用的头文件都存在于 /usr/include 中,按照在 c source
中的使用
BIO_new_mem_buf 在 openssl 库中。您必须使用 -lcrypto
(小写 L)或 pkg-config --libs openssl
给您的内容 link 您的图书馆。
您好,我正在创建一个与 JNI 一起使用的 openssl 包装器 c 库。我的 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:未定义符号:BIO_new_mem_buf
任何人都可以让我知道我应该怎么做,因为所有使用的头文件都存在于 /usr/include 中,按照在 c source
BIO_new_mem_buf 在 openssl 库中。您必须使用 -lcrypto
(小写 L)或 pkg-config --libs openssl
给您的内容 link 您的图书馆。