首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用静态NTL库构建共享库

使用静态NTL库构建共享库
EN

Stack Overflow用户
提问于 2017-01-03 09:23:14
回答 1查看 368关注 0票数 1

我为JNI编写了C++代码,然后构建了共享库。这个共享库使用的是NTL静态库。但它会出现以下错误。

编译器配置和错误(Netbeans):

代码语言:javascript
复制
g++ -c -O2 -s -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux      
-I/usr/local/include/NTL -fPIC  -MMD -MP -MF "build/Debug/GNU-Linux/ntl4java.o.d" 
-o build/Debug/GNU-Linux/ntl4java.o ntl4java.cpp
mkdir -p dist/Debug/GNU-Linux
g++     -o dist/Debug/GNU-Linux/libntl4java.so build/Debug/GNU-Linux/ntl4java.o -lgmp -lntl 
-shared -s -fPIC
/usr/bin/ld: //usr/local/lib/libntl.a(lip.o): relocation R_X86_64_32 against .rodata.str1.1' 
can not be used when making a shared object; recompile with -fPIC
//usr/local/lib/libntl.a: error adding symbols: Bad value

ntl4java.cpp

代码语言:javascript
复制
#include <NTLmethod.h>
#include <NTL/ZZ_pX.h>
#include <string.h>

using namespace std;
using namespace NTL;

JNIEXPORT jstring JNICALL Java_NTLmethod_mult(JNIEnv *env, jclass obj, jstring input) {
    const char *str = env->GetStringUTFChars(input, 0);
    ZZ p;
    char c[128];
    strcpy(c, str);
    env->ReleaseStringUTFChars(input, str);

    return env->NewStringUTF(c);
}
int main(){
   return 0;
}

NTLmethod.h

代码语言:javascript
复制
#include <jni.h>

#ifndef _Included_NTLmethod
#define _Included_NTLmethod
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jstring JNICALL Java_NTLmethod_mult(JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-03 09:32:14

因为您在共享库中使用了-fPIC标志,所以还需要使用-fPIC标志重新编译NTL。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41440140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档