Cygwin dlopen() 오류 ( Permission denied )
안녕하세요.
Windows Server 2008 R2 에서
Cygwin 환경에서 프로그래밍을 하고 있습니다.
프로그램의 롤은 oralce 의 dll 파일을 열서 oci 를
함수포인터로 할당 , 로직을 수행하는 것 입니다.
문제는 dlopen() 에서 dll 파일을 열지 못합니다..
제가 윈도우에서 db client 를 해보는것은 처음인데
시도 했던 파일은 다음과 같습니다.
/app/....../product/11.1.0/client_t/oci/lib/msvc/vc8/oraocci11.dll
/app/....../product/11.1.0/client_t/oci/lib/msvc/vc8/oraocci11d.dll
등 이고
환경 변수에 다음과 같이 PATH 를 등록 했습니다.
export LD_LIBRARY_PATH=$ORACLE_HOME/oci/lib/msvc/vc8
여기서 dlopen() 시 어떤 파일이든 "Permission denied" 가 나옵니다.
이 메시지는 dlerror()로 받은 오류 메시지 입니다.
잘안되서 위 dll 파일을 바이너리 파일과 같은 위치에 복사해서
dlopen( "./oraocci11.dll" , RAZY.... ) 등과 같이 해봤는데도
같은 결과 이네요
파일의 권한은 777로 해 놓은 상태 입니다.
어디를 살펴봐야 할까요?... 제가 컴파일해서 만든 shared object 는 dlopen 이 잘되는데
dll 은 안되는군요..
$ORACLE_HOME 이게 어떻게 설정되었는지 궁금
혹시 이 환경변수 설정이 잘못되었을수도 있음
--==================
그리고 한번 file $ORACLE_HOME/oci/lib/msvc/vc8/oraocci11.dll
해보아서 에러 안나는지 확인해보세여
============================
아! 그리고 cygwin안에서 사용하는 파일 경로가 windows에서 사용하는 경로하고 달라서일수도 있음
/app/....../product/11.1.0/client_t/oci/lib/msvc/vc8/oraocci11.dll
아마 이런경로로 설정했다면 cygwin용이 아닌 그냥 윈도우 프로그램에서는 dll을 못찾을수도 있음.
=====================
vc로 컴파일한 프로그램에서 에러난건지 아니면 cygwin으로 컴파일한 프로그램에서 에러난건지 궁금
즐린
즐린
기나긴 삽질속...
/hys545
네.. 제가 잘못 적었군요
윈도우상 경로는
C:\app\Administrator\product\11.1.0\client_1
Cygwin상 경로는
/cygdrive/c/app/Administrator/product/11.1.0/client_1
입니다. 아그리고 cygwin 상에서 .bash_profile 등에
ORACLE_HOME 을 정하면 sqlplus 등이 실행이 되지 않습니다.
오히려 unset 으로 ORACLE_HOME 을 풀어주면 작동이 됩니다.
따로 설정을 하지 않아도 윈도우의 환경변수를 가져온다고 해서
그 방법으로 되는구나 했는데 이것도 좀 이해가;;
일단 경로 말씀 하신것은 위에 썻듯이 문제가 없는 것은 확인 했습니다.
그리고 위에 제가 혹시 몰라서 ./.....dll 처럼 같이도 해봤구요
오류 메시지에서 No such file or directory 등의 메시지로
오류가 분류되는 것도 봤기 때문에 그 부분은 아닌것 같습니다.
그리고 cygwin 에서 만든 프로그램 입니다. 테스트 코드는 다음과 같습니다.
#include
#include
int main()
{
void* dl = NULL;
// oraocci11.dll
// oraocci11d.dll 으로 했습니다.
dl = dlopen( "./oci.dll" , RTLD_LAZY );
if( dl == NULL )
{
printf("dlopen : %s\n", dlerror() );
exit(0);
}
else
{
printf("success!!!\n" );
}
return 0;
}
Windows 는 64bit 입니다. Oracle 도 64bit 이구요..
이휴 어제이후로 발전이 없네요. hys545 님 답변 감사합니다.
좋은 하루 되세요~
댓글 달기