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.