jutylor의 모든 글

GCC로 컴파일 중 error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments 오류가 나올 경우.

error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments

이 오류는 GCC 4.3.2 버전 이상의 GCC 컴파일러를 사용할 때 나타납니다.

GCC 4.3.2 버전 이상에서는 open() 함수의 인자(argument) 가 2 개에서 3 개로 늘어나게 되었고, 이로 인해 GCC 4.3.2 이전 버전에서 잘 빌드되던 코드들이 GCC 4.3.2 이상 버전에서 오류를 토해내게 됩니다.

해결 방법은 코드상에 open() 함수를 모두 찾아 수정해 주는 수 밖에 없습니다만…. GCC 컴파일러는 친절하게 오류가 난 파일을 저 오류메세지 바로 위에 알려줍니다. 물론 몇번째 줄인지도 나옵니다만 한 소스 안에서 open 함수를 여러 곳에서 사용했다면 하나만 지적해 줄 것입니다.

찾기를 통해 open() 함수를 쥐잡듯이 뒤져서 추가된 인자를 기입해 주도록 합니다.

예시 :
오류 상태의 코드 : open(redir, O_WRONLY | O_TRUNC | O_CREAT);
수정한 코드 : open(redir, O_WRONLY | O_TRUNC | O_CREAT, 644);

추가된 부분은 권한입니다.  적당한 권한을 주면 되며 644 가 적당할 것입니다.(필요에 따라서 권한을 주면 됩니다.)

어때요? 참 쉽죠~~