2012-06-20 3 views
4

원래 Linux 용으로 개발 한 라이브러리가 있습니다. Cygwin에 이식하는 과정에 있습니다. 내 Cygwin에서 시스템의 모든 라이브러리는 다음과 같이 설치되어 있는지 내가 발견했습니다 :Cygwin 가져 오기 라이브러리가 755 모드로 설치되는 이유는 무엇입니까?

  • DLL /usr/bin 모드로 설치 (cygfoo.dll) 755
  • 정적 아카이브 (libfoo.a)이 설치 모드 /usr/lib-644
  • 가져 오기 라이브러리 (libfoo.dll.a) /usr/lib 모드 755

첫 번째 두 가지가 나에게 완벽합니다. DLL은 실행 파일이므로 모드 755 여야합니다. 정적 아카이브는 실행 파일이 아니므로 모드 644입니다. 그러나 세 번째 파일은 이상하게 보입니다. 가져 오기 라이브러리는 실제로 실행 파일이 아닌 정적 아카이브입니다 (ar -t libfoo.dll.a은 아카이브의 내용을 나열합니다). 또한 644 모드를 설치하면 안됩니까?

Cygwin에서 755 모드로 가져 오기 라이브러리를 설치하는 이유는 무엇입니까?

+1

@Wooble : 왜냐하면'.dylib'와'.so's *는 * 실행 파일이기 때문입니다. 기록 보관소가 아닙니다. –

+0

키 dll.a 파일 중 하나를 644로 chmod하면 중단되는 부분을 볼 수 있습니다. – tomdemuyt

+0

@DanMoulding,'library'는 2012 태그 정리의 일부로 누크되었습니다. 다시 작성하지 마십시오. – Charles

답변

-1

Windows 요구 사항 : .dll 파일에 실행할 코드가 포함되어 있으므로 실행 비트를 설정해야합니다.

파일 실행 권한을 제거하면 실행중인 프로세스가 분리되어 있어도 Windows는 해당 파일의 코드를 실행하지 않습니다.

사이드 노트 : Windows에는 + x 비트가 없다는 것이 일반적인 오해입니다. 그것은 기술적으로 사실입니다. Windows는 POSIX rwx 사용 권한을 사용하지 않지만 Cygwin이 유사한 인터페이스를 제공하려고 시도합니다. 그러나 Windows는 ACL (액세스 제어 목록)을 사용하여 사용 권한을 설정하지만 Cygwin이 + x 비트로 매핑하는 개념 인 "실행 권한"이 있습니다.

소스/추가 읽기를 원하면 Cygwin 메일 링리스트에 long discussion이 있습니다.

+0

그것은'/ usr/bin'에있는 DLL에 대해 완벽합니다. 하지만 DLL에 대해 묻는 것은 아닙니다. '/ usr/lib'에 인스톨되는 라이브러리 ('* .dll.a', MSVC'* .lib'와 동등)에 대해서 묻고 싶습니다. 나는 그 질문을 분명히 할 것이다. –

0

나에게 발생하는 유일한 해결책은 설치 관리자가 파일 이름에서 ".dll"문자열을 찾고 복사 된 파일의 실행 가능 속성 (x)을 활성화하는 것입니다. .../.dll $/(.dll 끝에 만).

OS의/파일 시스템 간의 임피던스 불일치가 설치 프로그램/복사기에 설치 프로그램 작업에서 속성 값을 결정하는 전략을 강요하는 것으로 이해할 수 있습니다 (속성 목록을 복사 된 파일에 매핑하는 것보다 쉽습니다 ...) 창문 만 ... 그것을이 당신의 "libfoo.dll.a"을 "libfoo.dxx.a"로 이름을 확인하고 테스트하려면 .EXE, .COM 및 .DLL)

를 찾을 필요가

0

2000로 돌아 가기 :

NTFS 파티션에서 NT/W2K는 D LLs를 으로 설정하면 프로세스 시작시 DLL을로드 할 수 있습니다.

ntsec을 사용하는 사람이 ntsec을 사용하지 않거나 FAT 파티션에 포장하지 않은 사람이 포장 한 tar 보관 파일 을받지 않는 한 문제가되지 않습니다. Cygwin에서 접미사 "exe", "bat", "com"에 대해서만 실행 권한을 위임하므로 ntsec이 설정되지 않은 경우 DLL은 stat() 호출로 실행 불가능한 것으로 처리됩니다.

ntsec를 사용하는 사람이 그 tar 아카이브, 윈도우 메시지

와 을 실패 아카이브에서 DLL 중 하나를 필요로하는 응용 프로그램의 시작을 압축을 풉니 다

은 "응용 프로그램을 제대로 초기화하지 못했습니다 (0xc0000022입니다) "

이는 대부분의 사용자에게 의미가 없습니다.

이 문제를 해결하려면 간단한 단계를 거쳐야합니다. ntsec이 설정되어 있지 않거나 파일 시스템이 ACL (FAT/FAT32)을 지원하지 않을 때 DLL에 대해 권한을 실행하십시오. 여기

: http://cygwin.com/ml/cygwin-developers/2000-10/msg00044.html

-1

은 ".DLL"를 포함하는 파일 이름을이 동작의 결과로 단지 게으른 해킹 보인다. "수정"(here) 뒤에 추론에 대한 hasanyasin의 답변을 참조하십시오.

관련 문제