相关疑难解决方法(0)

如何将.so文件添加到Linux中的java.library.path中

我正在使用一个java应用程序,它需要.dllWindows中java.library.path中的文件.要在Linux中运行相同的应用程序,我有相应的.so文件应该添加到java.library.pathlinux机器中,到目前为止我没有找到任何简单的解决方案

我确实把.so它放在了一个已经在类路径中的文件夹中,但是我的应用程序仍然抱怨没有所需的.so文件java.library.path

我想找到:

  1. 添加的.so方法java.library.path
  2. 如何知道它是否已添加(添加时)

linux java.library.path

43
推荐指数
2
解决办法
9万
查看次数

C++静态链接共享库

我有一个共享库,由我无法控制的另一个应用程序使用,需要*.so对象.我的库使用sqlite3,它需要与它静态链接(我绝对需要一个自包含的二进制文件).

当我尝试编译和链接我的库时:

-fpic -flto -pthread -m64
-flto -static -shared
Run Code Online (Sandbox Code Playgroud)

我最终得到以下错误:

/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

什么是与-fPIC相关的重新编译?我的代码还是CRT?

我已经尝试用-fPIC编译我的对象,结果相同.

谢谢.

编辑:

这个问题似乎与SQLite3无关.

我写了一个简单的单行无用库,它编译和链接如下:

g++ -c -fPIC -o bar.o bar.cpp
g++ -shared -o bar.so bar.o
Run Code Online (Sandbox Code Playgroud)

但不是这样的:

g++ -c -fPIC -o bar.o bar.cpp
g++ -static -shared -o bar.so bar.o
Run Code Online (Sandbox Code Playgroud)

问题似乎与CRT(crtbeginT.o)有关.我应该重新编译GCC - 用pic还是其他什么?

c++ crt static-libraries dynamic-library

26
推荐指数
2
解决办法
3万
查看次数

如何在Java中使用Linux共享库?

有没有办法so从我的Java代码中调用库中的函数?通常,是否可以so在Java程序中使用Linux 库?

java linux shared-libraries

5
推荐指数
2
解决办法
7245
查看次数

确定STDERR是否要转到终端

我有一套Java程序,在我们的Linux服务器上用作命令行工具.他们中的大多数都使用在STDERR上打印进度条的类,类似于Perl Term::ProgressBar.

我想在STDERR进入终端时显示进度条,并在重定向STDERR时自动禁用自身,以便重定向数据中没有所有类型的进度条.

检查System.console() == null是我的第一个想法,但重定向STDOUT就足以实现这一点true,即使STDERR仍在进入终端.有什么我可以检查特定于STDERR的东西吗?特定于Linux或使用本机API的解决方案可以满足我的需求.

java linux command-line-interface stderr io-redirection

5
推荐指数
1
解决办法
226
查看次数

如何解决致命错误jvmti.h没有这样的文件或目录编译终止c代码ubuntu?

如何解决致命错误jvmti.h没有这样的文件或目录编译终止c代码ubuntu?我的代码是:

包括"jvmti.h"

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM*jvm,char*options,void*reserved){

/*我们返回JNI_OK表示成功*/printf("\n name name,\n \n");

返回JNI_OK;

}

JNIEXPORT void JNICALL Agent_OnUnload(JavaVM*vm){}

在终端中输入以下命令:gcc -Wall -W -Werror first_agent.c -o firstagent

first_agent.c:1:19:致命错误:jvmti.h:没有终止此类文件或目录编译.

其中java jdk版本为javac 1.7.0_25

其中gcc版本gcc版本4.7.3(Ubuntu/Linaro 4.7.3-2ubuntu4)

这里应该将gcc版本更新到4.8?

c java ubuntu gcc jvmti

5
推荐指数
2
解决办法
2422
查看次数

致命错误:jni.h:没有这样的文件或目录

我正在尝试在Windows上重新创建本教程: Java Native Interface(JNI)

当我尝试编译它时,我收到以下错误:

fatal error: jni.h: No such file or directory

 #include <jni.h>

compilation terminated.
Run Code Online (Sandbox Code Playgroud)

我的命令行是:

gcc -Wl,--add-stdcall-alias -IC:\Program_Files\Java\jdk1.7.0_45\include -IC:\Program_Files\Java\jdk1.7.0_45\include\win32 -shared -o hello.dll HelloJNI.c
Run Code Online (Sandbox Code Playgroud)

我在所有文件所在的文件夹中编译.

我确信此文件夹中的文件"jni.h"位于:

C:\Program Files\Java\jdk1.7.0_45\include
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么import语句不起作用?

谢谢!

c java native interface

4
推荐指数
1
解决办法
1万
查看次数