프로그램 Compile & Run Error

bueline의 이미지

JNI와 관련한 프로그램을 만들었습니다.
프로그램을 Compile해서 실행하면 실행이 잘 되는데
안되는 경우가 발생해서 이것저것 찾아보다가 이해가 안되는 상황이 있어서 질문합니다.

하나의 터미널을 열어서 make로 compile하고 그 터미널에서 실행을하면
프로그램이 오류없이 프로그램을 진행합니다.
하지만, 다른 터미널을 열어서 프로그램을 실행하게 되면 프로그램이 오류를 발생합니다.

발생오류는 Java의 Method를 찾지 못한다는 Error인데요
오류 발생후에 다시 컴파일을 했던 터미널에서 실행하면 오류없이 실행이 됩니다.

어떤 이유로 컴파일이 되지 않은 터미널에서 프로그램을 실행하면 오류가 발생하는지 궁금합니다.

런맨의 이미지

두 터미널에서 export 하여 환경 변수 값을 비교해보세요

인생은 도박이다.

bueline의 이미지

두 터미널에서 export해서 값을 비교하면 값은 같습니다.
한 터미널에서 안될때 다시 그 터미널에서 컴파일하면 프로그램이 실행됩니다.

어떤이유인지 정말 궁금하네요 쩝

hys545의 이미지

이게 다를 경우 메소드 못찾을수도 있습니다.

즐린

즐린

bueline의 이미지

같은 계정으로 접속하기 때문에 환경설정 값이 변경되는 일은 없다고 보는데요
그래도 혹시나해서 찾아보았지만 역시나네요

다른건 모르겠지만 지금 프로그램이
JNI를 사용한건데요
그 쪽과 관련해서 설정을 찾아봐야 하는건 아닌가 싶은데요

많은 분들의 조언 부탁드릴께요

런맨의 이미지

환경 설정을 비교할때 하나는 make를 하고 다른 하나는 make를 안하고 비교해보신거죠??
make과정에서 환경설정이 바뀔수있습니다..

말씀하신 증상으로는 환경설정밖에 의심되는 부분이 없는데

좀더 다양하고 많은 정보를 주시면 다른분들이 답변하기 쉬울듯 하네요

인생은 도박이다.

enshahar의 이미지

JNI에서 네이티브 메소드를 찾기 위해서는 컴파일해서 만든 shared library를
참조할 수 있어야 합니다. 이때 참조 경로는 리눅스의 경우 LD_LIBRARY_PATH에
있는 디렉토리들을 차례로 찾게 되지요.

가능한 시나리오는 2가지일것 같습니다.

1. 님께서 사용한 makefile에 LD_LIBRARY_PATH를 만들어진 .so파일이
있는 디렉토리로 설정하는 코드가 들어가 있는 경우
-> 이경우 다른 분들이 말씀하신대로 양 터미널의 환경변수를
비교해서 LD_LIBRARY_PATH나 CLASSPATH에 차이가 있는지 확인하신 후
그에 맞게 .bash에서 환경 변수를 변경하면 됩니다.

2. LD_LIBRARY_PATH에 .(현재 디렉토리)이 들어가 있는데,
양 터미널에서 java를 실행한 위치가 달랐다.
-> make를 한 터미널에서는 .so파일이 있는 디렉토리에서 java mainclass 라는 형태로
실행을 하고, 새로 띄운 터미널에서는 다른 디렉토리에서 실행을 했다면
당연히 두번째 경우에는 .so파일을 찾지 못해서 프로그램이 중단됩니다.

winchild의 이미지

말로 에러난다고 하는것 보다, 에러난 메시지를 캡춰해서 붙여주시는 센스~~~

- 겨울아찌 -
winchild@kldp.org

- 겨울아찌 -
winchild@gmail.com

bueline의 이미지

실행이 되는 터미널의 값
LD_LIBRARY_PATH=:/usr/java/jdk1.5.0_22/jre/lib/i386:/usr/java/jdk1.5.0_22/jre/lib/i386/client
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
SSH_AUTH_SOCK=/tmp/ssh-eZSol23180/agent.23180
MAIL=/var/spool/mail/cam
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java/jdk1.5.0_22/bin:/usr/java/jdk1.5.0_22/jre/lib/i386/client:/usr/local/mysql/bin:/home/cam/bin
INPUTRC=/etc/inputrc
PWD=/home/cam/server/src/java
JAVA_HOME=/usr/java/jdk1.5.0_22

실행이 제대로 되지 않는 메소드 참조오류가 나는 터미널의 값
LD_LIBRARY_PATH=:/usr/java/jdk1.5.0_22/jre/lib/i386:/usr/java/jdk1.5.0_22/jre/lib/i386/client
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
SSH_AUTH_SOCK=/tmp/ssh-epuMB23206/agent.23206
MAIL=/var/spool/mail/cam
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java/jdk1.5.0_22/bin:/usr/java/jdk1.5.0_22/jre/lib/i386/client:/usr/local/mysql/bin:/home/cam/bin
INPUTRC=/etc/inputrc
PWD=/home/cam
JAVA_HOME=/usr/java/jdk1.5.0_22

두곳의 값은 똑같아서 차이점을 확인할 수가 없더라구요
제가 실행한 make 파일을 올리도록 하겠습니다.

LIB_PATH = ../../lib
INSTALL_PATH = ../../bin

CC = g++

COMP = -Wall -c \
-I. \
-I/usr/include \
-I/usr/local/mysql/include/mysql \
-I../../include/lib \
-I../../include \
-I$(JAVA_HOME)/include \
-I$(JAVA_HOME)/include/linux

LIB = $(LIB_PATH)/common_function.o\
$(LIB_PATH)/shared_memory.o\
$(LIB_PATH)/database_function.o

LINK = -L/usr/local/mysql/lib/mysql -L$(JAVA_HOME)/jre/lib/i386/client -L. -ljvm -lm -lz -lpthread -lmysqlclient -lcurses -Xlinker -zmuldefs

CPGM = template_count template_end

all : $(CPGM) \
clean

$(LIBS) : $@
$(CC) $(COMP) $@.cc

$(CPGM) : $@
$(CC) $(COMP) $@.cc
$(CC) -o $(INSTALL_PATH)/$@ $@.o $(LIB) $(LINK)

install :
cp *.h ../../include/lib
cp *.o ../../lib

clean :
rm -f *.o *.lis tp*

이런식으로 되어 있는 makefile을 만들어서 컴파일 하였습니다.

컴파일시에 오류는 발생하지 않고 있고요
제가 심어놓은 로그를 보면

clsH = env->FindClass("ConversionSchedule");
이부분에서 clsH가 NULL 값이 되고 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.