Eclipse 시작으로 "java.library.path"에 네이티브 라이브러리를 추가하는 방법 (재정의하는 대신)


91

java.library.path에 추가해야하는 네이티브 라이브러리가 있습니다 . JVM 인수 -Djava.library.path = path ... 원하는대로 경로를 설정할 수 있습니다.

내 문제는 내 다른 라이브러리 (pentaho보고)가 기본 java.library.path (시스템 디렉토리 등 포함)를 기반으로 글꼴을 검색하고 수동 설정이 기본 경로를 재정의한다는 것입니다 ..

그래서 : 그것을 재정의하는 대신 기본 java.library.path에 경로 항목을 추가 할 수 있습니까 (-Djava.library.path로 수행되는 것처럼 보입니다)? (배포에 좋지 않은 기본 경로를 직접 추가하고 싶지 않습니다)

편집 : 누락 된 세부 사항에 대해 죄송합니다. Eclipse로 작업하고 있습니다. (배포는 JNLP로 이루어지며 리소스 아래에서 nativelib 를 사용할 수 있습니다 )


1
pls는 대신이 질문에 대한 대답을 볼 수 있습니다-저에게는 훨씬 낫습니다 : stackoverflow.com/questions/957700/…
laher

"..에 네이티브 라이브러리를 추가하는 방법"이라는 질문은 혼란 스럽습니다. 다른 "라이브러리 경로"를 추가 (추가 또는 앞에 추가)하는 것입니다. 즉, Eclipse가 기본적으로 java.library.path = path1 : path2 : path3과 같은 것을 표시한다고 가정하면 문제는 Eclipse를 시작하는 방법이 java.library로 끝나는 것입니다. .path = 내 / lib 디렉토리 / 폴더 : 경로 1 : 경로 2 : 경로 3
whaefelinger

답변:


46

이 문제를 잊었다 ... 사실 이클립스에 물어보고 있었는데, 원래 말하지 않아서 미안해. 그리고 대답은 너무 간단 해 보입니다 (적어도 3.5에서는 아마도 이전 버전에서도 가능할 것입니다).

자바 실행 구성의 인수 : VM 인수 :

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"

따옴표를 잊지 말아야합니다. 그렇지 않으면 PATH의 공백에 문제가 있습니다.


7
두 개의 공유 라이브러리가 있고 하나는 다른 하나에 종속되어 있으면 작동하지 않습니다. 첫 번째는 Java 런타임에 의해 발견되지만 두 번째는 시스템 동적 로더에 의해 해결됩니다. 내가 찾은 유일한 해결책은 LD_LIBRARY_PATH를 설정하는 것입니다.
kevin cline

4
@Touko가 제공 한 답변은 기본 라이브러리 폴더를 추가하거나 앞에 추가하는 원래 질문에 맞지 않습니다. 적어도 Mac OS 10.8에서는 $ PATH, $ LD_LIBRARY_PATH, $ {workspace_loc : project} \ lib 모두 기본값과 관련이 없습니다. 예를 들어 Mac에서 기본값은 $ HOME / Library / Java / Extensions : / Library / Java / Extensions : / Network / Library / Java / Extensions : / System / Library / Java / Extensions : / usr / lib / java입니다. :.
whaefelinger 2014

Eclipse에서 TestNG를 사용하는 경우 TestNG 실행 구성을 편집해야합니다.-실행 구성 창에서 대상 TestNG 구성을 선택하십시오. -환경 탭을 선택합니다.-PATH 변수를 추가하고 해당 값을 대상에 설정합니다.-기본값 인 "기본 환경에 환경 추가"토글을 그대로 둡니다.
Philippe

예를 들어도 될까요?
basickarl 2014

@kevincline이 경우 정확히 작동하지 않는 이유를 자세히 설명해 주시겠습니까? 나는 방금 그 문제에 부딪 혔 고이 솔루션의 문제점을 이해하려고 노력하고 있습니다.
anula

14

java.library.pathEclipse에서 개발시 방해하지 않고 기본 라이브러리를 추가하려는 경우 (절대 경로를 포함하고 시작 구성에 매개 변수를 추가 할 필요가 없도록) Java 빌드의 각 Jar에 대한 기본 라이브러리 위치 경로를 제공 할 수 있습니다. 기본 라이브러리 위치 아래의 경로 대화 상자 . 원시 라이브러리 파일 이름은 Jar 파일 이름과 일치해야합니다. 이 자세한 설명을 참조하십시오 .


3
-1. 최종 사용자가 IDE에서 응용 프로그램을 실행하고 있다고 가정합니다.
finnw

@finnw 나는 당신의 요점을 봅니다. 재정의하지 않고 개발 중에 IDE에서 네이티브 라이브러리를 추가하는 방법에 대한 솔루션을 찾고있는 질문 java.library.path을 발견하고 다른 곳에서 솔루션을 찾은 후 돌아 왔습니다. 더 명확하게 내 대답을 편집합니다.
Fabian Steeg

실제로 질문에서 언급하지 않았지만 Eclipse로 작업하고 있습니다.
Touko

이것은 사용자가 질문의 문제로 설명하는 것처럼 속성을 설정하면 java.library.path가 재정의되기 때문에 현재 Eclipse (Luna) 버전에서는 작동하지 않습니다.
Alex N.

9

SWT는 필요한 네이티브 DLL을 JAR에 넣습니다. 예를 들어 "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar"를 검색하십시오.

DLL은 JAR의 루트에 있어야하며 JAR은 서명되어야하며 DLL은 META-INF / MANIFEST.MF에 체크섬과 함께 나타나야 VM이이를 선택할 수 있습니다.


2
NetBeans로 어떻게 할 수 있습니까?
Maciek Sawicki

AFAIK, NetBeans는 Ant를 사용하여 프로젝트를 빌드합니다. 서명 된 JAR을 만드는 방법과 DLL과 같은 것을 매니페스트에 넣는 방법에 대한 Ant 문서를 읽어보세요.
Aaron Digulla 2009

Eclipse에서 .dll을 추가하려면 어떻게 설정합니까?
NoBugs

@NoBugs는 : 이클립스에서,이 게시물이 도움이 될 것입니다 eclipsezone.com/eclipse/forums/t49342.html
아론 Digulla

@AaronDigulla DLL이 항상 이런 방식으로 첨부 될 수 있다고 제안합니까? 나는 그것이 같은 것을 검색한다고 생각했다 java.library.path. 당신은 그것의 뿌리 만 찾기를 제안 jar합니까?

4

Windows에서는 다음과 같습니다.

-Djava.library.path = "C : / MyLibPath; % PATH %"

% PATH %는 이전 -Djava.library.path입니다.


이 아이디어를 시도하지만 java.library.path으로 결과 : D : \ 작업 \ MyProject를 \ lib 디렉토리; % 경로 %
Touko

$ {system_property : java.library.path}를 사용할 수도 있습니다.
Rob Elsner

2
UNIX / Mac / GNU Linux의 기본값은 LD_LIBRARY_PATH입니다. PATH는 Windows의 것입니다.
whaefelinger 2013 년


2

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 는 Eclipse의 런처에 구현 된 대체 메커니즘이 없으며 적어도 Juno 릴리스까지는 없다고 말합니다.

따라서 기본 설정에 대한 사전 지식없이 Eclipse를 시작할 때 java.library.path에 다른 라이브러리 폴더를 추가하거나 앞에 추가하는 것은 (거의) 불가능합니다.

거의 썼습니다. 이클립스를 시작하고, java.library.path의 내용을 덤프하고, 하나의 명령으로 이클립스를 중지 할 수 있어야하기 때문입니다. 덤프는 구문 분석 된 다음 Eclipse를 시작하기위한 입력으로 사용됩니다.

#!/bin/bash
# get default value of java.library.path (somehow)
default_lib_path=$( start_dump_stop_eclipse_somehow )  

# now launch Eclipse
eclipse --launcher.appendVmargs \
         -vmargs \
         -Djava.library.path="/my/native/lib/folder:${default_lib_path}"

1

UNIX 시스템에서는 LD_LIBRARY_PATH 환경 변수에 추가 할 수 있습니다. Windows에서 JVM은 자동으로 시스템 특성 java.library.path를 PATH로 설정합니다. 따라서 dll이 PATH에 있으면 설정된 것입니다.


스레드 스타터는 두 번째 기본 라이브러리 폴더를 "추가"하는 방법에 대해 매우 구체적이었습니다. 동의하지 않습니까?
whaefelinger 2013 년

@ user667073 나는 질문 ;-) 그렇지 않으면 공유 lib 디렉토리를로드하는 방법 같은 ... 추가를 스레드 스타터가 이미 아는되는 말을 한
Ustaman 산갓

STS 3.4.0 및 Mac OS 10.8 : LD_LIBRARY_PATH의 설정은 java.library.path에 영향을주지 않습니다. Subclipse / JavaHL로 이것을 테스트했습니다. 이것은 작동했습니다 : STS --launcher.appendVmargs -vmargs -Djava.library.path = / opt / local / lib while export LD_LIBRARY_PATH = / opt / local / lib; STS는 부정적이었습니다.
whaefelinger 2014

1

창-> 환경 설정-> Java-> 설치된 JRE. 그런 다음 현재 JRE (JDK)를 선택하고 편집을 클릭합니다. 기본 VM 인수 채우기 : -Djava.library.path = / usr / local / xuggler / lib. 끝난!


1
스레드 스타터가 "[..]을 재정의하는 대신 [..] 네이티브 라이브러리를 추가하는 방법"에 대해 구체적으로 묻기 때문에이 대답은 쓸모가 없습니다. 이 답변은 기본 설정보다 우선합니다.
whaefelinger

1

위의 의견 중 하나에서 Rob Elsner가 제공 한 솔루션은 완벽하게 작동합니다 (OSX 10.9, Eclipse Kepler). ":"로 구분 된 경로에 추가 경로를 추가해야합니다.

$ {system_property : java.library.path}를 사용할 수도 있습니다. – Rob Elsner 2010 년 11 월 22 일 23:01


0

원시 라이브러리 파일 이름은 Jar 파일 이름과 일치해야합니다. 이것은 매우 중요합니다. jar 이름과 dll 이름이 동일한 지 확인하십시오. 또한 Fabian Steeg의 게시물을 참조하십시오. jawin에 대한 내 다운로드에는 dll 및 jar에 대한 다른 이름이 포함되어 있습니다. jawin.jar 및 jawin d .dll, dll 파일 이름에 추가 'd'가 있습니다. 간단히 이름을 jawin.dll로 변경하고 " http://www.eclipsezone.com/eclipse/forums/t49342.html " 게시물에 언급 된대로 이클립스에서 네이티브 라이브러리로 설정했습니다.


문제는 Eclipse를 시작할 때 기본 라이브러리 (폴더)를 추가하는 것입니다.
whaefelinger 2014

0

어떤 이유에서인지 여러 폴더를 작동시킬 수 없었습니다 (한동안은 잘했지만 더 많은 dll이 필요하고 더 많은 폴더를 추가하자마자 경로에 공백이 없습니다). 그런 다음 필요한 모든 dll을 하나의 폴더에 복사하고 java.library.path 로 사용하여 작동했습니다. 나는 설명이 없습니다. 누군가가 있다면 그것은 좋을 것입니다.


음, 네이티브 라이브러리가 java.library.path를 통해 발견되고 다른 라이브러리를 해당 폴더에 복사하면 두 번째 라이브러리도 발견되는 것이 자연스럽지 않습니까?
whaefelinger 2013 년

물론 그것이 내가 그것을 사용한 이유입니다. 내가 궁금한 것은 물건을 이동하거나 심볼릭 링크하지 않고도 여러 폴더를 추가 할 수 있는지 여부였습니다.
Ustaman Sangat 2013

0

기존 답변의 대부분은 특정 프로젝트에 대해 이것을 설정한다고 가정하지만 SQL Server JDBC 드라이버에 대한 통합 인증을 지원하려면 Eclipse 자체 에 대해 설정해야했습니다 .

이를 위해 일반 실행기 대신 Java 명령 줄에서 Eclipse를 실행 하는 지침 을 따랐습니다 . 그런 다음 해당 스크립트를 수정하여 -Djava.library.path 인수를 Java 명령 줄에 추가했습니다.


0
  1. Windows : PATH 환경 변수에 라이브러리 경로를 추가하십시오.
  2. Linux : LD_LIBRARY_PATH 환경 변수에 라이브러리 경로를 추가합니다.
  3. Mac의 경우 : DYLD_LIBRARY_PATH 환경 변수에 라이브러리 경로를 추가합니다.

java.library.path 해당 플랫폼에서 위의 변수 값으로 초기화됩니다.

이것은 모든 IDE에서 작동합니다.

다음을 호출하여 값이 예상 한 값인지 테스트 할 수 있습니다. java -XshowSettings:properties


-2

Windows에서는 기본 DLL이 PATH의 디렉토리에있는 경우 시작 메뉴 나 바로 가기가 아닌 명령 줄에서 Eclipse시작 하는 것이 중요하다는 것을 알았습니다 . 분명히 이것은 적절한 디렉토리가 경로에 있는지 확인합니다.


내가 틀렸다면 수정하지만 DLL (또는 실행 가능한 바이너리)을 검색 할 때 Windows의 현재 작업 디렉토리가 자동으로 포함된다고 생각합니다. 따라서 DLL이있는 폴더로 변경하고 Eclipse를 시작한 다음 예, 찾고있는 DLL을 찾습니다. 그 외에도이 답변은 스레드 시작 질문과 어떤 관련이 있습니까?
whaefelinger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.