컴퓨터활용/유닉스

dlopen error : Permission denied

멜번초이 2017. 7. 1. 07:23

프로프레임 환경에서 프로그램 실행시 

[dlopen error Permission denied] 함수 [mxx_dacom_msg_deco]에 대한 dlcall이 실패하였습니다 [seq_no:14984545]  

라는 메세시지를 만날 때가 있다. 

mxx_dacom_msg_deco.c 를 컴파일하여 libmxx_dacom_msg_deco.so 를 만들고 이 libmxx_dacom_msg_deco.so 를 dlupdate 한 후에 실행했을 때 나온 메시지 이다. 

libmxx_dacom_msg_deco.so 는야  dlupdate 될 때  $TDLDIR/run/[각주:1] 아래에 복사되어 지므로 접근 권한이 없지 않겠지만libmxx_dacom_msg_deco.so 를 만들때 링크된 libclntsh.aliblicense.a 라는 외부 라이브러리가 로드될 때 이 라이브러리들의 접근 권한이 문제가 되는 지 점검을 해야 하는 것이다. 

이런 문제에 대한 접근 방법은 다음과 같다. 

1. LIBRARY PATH 

LD_LIBRARY_PATH 에 해당 라이브러리가 존재하는 지 확인한다.  사실 LD_LIBRARY_PATH 해당 라이브러리가 없을 경우는 아래와 같은 메시지가 나올 것이다.  하지만 접근 권한이 없다는 것과 약간의 관련은 있다. 

Dependent module libclntsh.a(shr.o) could not be loaded.
Could not load module libclntsh.a(shr.o).
System error: No such file or directory

2. 파일 접근 권한  

LD_LIBRARY_PATH 가 지정된 디렉토리에 해당 라이브러리가 있다면 접근 속성을 봐야 한다. 파일의 속성이 755 로 되어 있는 지 확인한다. 아닌 경우 해당 모듈 라이브러리 속성을 다음과 같이 바꿀 수 있다.

chmod 755 libclntsh.a

3. 디렉토리 접근 권한

속성이 정확히 755 로 되어 있는데도 불구하고 계속 Permission error 가 계속 날 경우는 유저를 점검해야 한다. 간혹 실수하는 것이 컴파일하는 유저와 실행하는 유저가 다르다는 것을 놓친다. 프로그램을 실행하는 유저가 해당 해당 라이브러리에 접근 권한이 있는 지 확인한다. 특히 파일은 755 이지만 상위의 디렉토리가 접근이 불가하여 실행시 파일을 읽지 못하는 경우가 생길 수 있기 때문이다. 

  1. dlupdate된 모든 라이브러리의 물리적 파일이 존재하는 디렉토리 [본문으로]

'컴퓨터활용 > 유닉스' 카테고리의 다른 글

pfmNumCalc 인자 개수 체크 쉘  (2) 2017.12.16
Lock option has no effect for the map  (0) 2017.07.19
디렉토리 사용량 조회  (1) 2017.06.18
디스크 사용량 조회  (0) 2017.06.18
일괄 거래 재거래  (1) 2017.06.08