【问题标题】:issues in creating c linux library创建c linux库的问题
【发布时间】:2015-05-04 10:31:40
【问题描述】:

您好,我正在创建一个可与 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 #include #include #include #include #include #include #include #include

但是当我从 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 源代码中使用的那样

【问题讨论】:

  • 您在 Windows 上吗?如果是这样,我不相信将JAVA_HOME 用于库PATHs

标签: java c openssl java-native-interface shared-libraries


【解决方案1】:

BIO_new_mem_buf 在 openssl 库中。您必须将您的库与 -lcrypto(小写 L)或 pkg-config --libs openssl 提供的内容链接。

【讨论】:

  • 我与 -lcrypto 链接它构建正常,但与静态选项 -l:libcrypto.a 链接,然后失败。 . . $ gcc -fPIC base64.c -lcrypto -shared => 构建OK。 . . $ gcc -fPIC base64.c -l:libcrypto.a -shared 。 /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcrypto.a(bio_lib.o): 重定位R_X86_64_32反对` .rodata.str1.1' 制作共享对象时不能使用;使用 -fPIC /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcrypto.a 重新编译:添加符号时出错:值错误
  • @MinhNV 因为这是一个不同的错误,您最好的选择可能是提出一个新问题(或使用您选择的搜索引擎来了解是否有人以前解决过类似问题)
猜你喜欢
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多