포함 gcc 사용법 [Linux] pth read

 최근에 가장 고생했던 게 리닉스였다 정말 다 부수고 싶었어 그냥 C++로 하면 되는데 굳이 Linux로 하겠다고… 많은 문제에 대해서 각종의 시행 착오를 거쳐서 해결한 방법을 다 정리하려고 한다.VirtualBox, Unubtu다운로드 창에서 실행할 수 있는 Linux가상 머신의 설치 부분을 생략하려면 바로 pthread를 검색하고 아래로 내리다.

▶ VirtualBox Download Link : www.virtualbox.org/

Welcome to VirtualBox.org! VirtualBox is a powerful x86 and AMD64/Intel64 virtualization product for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers, it is also the only professional solution that is freely available…www.virtualbox.org▶Ubuntu Download Link : ubuntu.com/download/desktopUbuntu is an open source software operating system that runs from the desktop , to the cloud , to all your internet connected things . ubuntu . comVirtualBox と Ubuntu の インストール は 一 つ だけ 覚えよう 。 각각을 다운로드하고, Ubuntu는 .iso(디스크 이미지 파일) 형태로 유지한다.

그런 다음 위와 같은 창이 나올 텐데( 만들어진 가상 머신은 무시하자), 위의 새 창을 눌러

위와 같은 종류는 ‘Linux’, 버전은 ‘Ubuntu(64-bit)’로 설정해 준다. 그 후 메모리, 디스크 등은 PC 사양에 맞춰 설정하면 된다.

필자의 컴퓨터는 I5-8세대, RAM 16GB, 지포스 MX250, SSD 500GB이며, Ubunbu 세팅은 메모리 2GB, 프로세서 2개, 디스크 10GB로 설정했다.

Windows에서 pthread.h (POSIX Thread) 사용하는 UNIX 기반 OS의 API에서 UNIX 응용프로그램을 개발하는 애플리케이션 인터페이스 규격을 POSIX라고 한다.실은 gcc나 Linux와는 별로 관계없는 이야기다. 그러나 pthread.h는 UNIX 기반의 OS를 대상으로 개발된 API이기 때문에 사용 자체는 Linux로 하는 것이 매우 간편해도 Linux 개발환경이 Visual studio만큼 친절하지 않기 때문에 Windows에서의 개발이 보다 사용자 친화적인 환경이다. 필자도 Visual studio에서 pthread 및 semaphore 외운 후에 Linux로 넘어가는 것이 훨씬 편했다. Windows에서 pthread.h 를 사용하는 방법은 아래 링크를 참조하자.Visual Studio2015차례 pthread다운 pthread-win32download&install프로젝트 설정에서 경로를 조절하고 pthread를 사용하기 때문에 쉽게 해결하고 싶은 분은 c:pthreads경로의 파일 전체를 unzip 합니다. dll 구성 속성 -> 디버깅 -> 환경 PATH=C:pthreadsPre-built.2dl;; 를 추가 dll 파일 디렉토리 경로 추가 include CC++ 등의 추가 속성으로 들어가 추가할 것 -> 해당 프로세스에 추가할 것 의 디렉토리C:pthreadsP에 대한 주의 사항으로 들어가 있는 점 -> 추가할 것 메인이 되는 프로젝트가 있고 테스트를 위해 새로운 프로젝트를 만들어서 pthread를 사용하려면 그 프로젝트에 대해 다시 디렉토리 경로를 설정해야 한다.

그 후 #include 를 클릭하면 사용할 수 있다. 그러나 아마 또 다른 문제가 발생할 것이다.

결론부터 말하면, timespec 구조체가 typedef struct timespec에서 정의되었어야 했는데, structimespec에 정의되어 있기 때문이다. 그렇다고 tydef struct timespec으로 고친다고 문제가 해결되는 것은 아닌 (….) 비주얼 스튜디오가 C에 대한 지원이 형편없고 C99의 특성에 대응하지 않기 때문이다. 결론적으로 #define HAVE_STRUCT_TIMESPEC을 포함하면 해결된다.

gcc 명령어 정리 GNU compiler collection 조금 여담을 섞어 들어가자. 신경 안 쓰이는 사람은 다음 단락부터 읽어도 된다. gcc는 GNU 프로젝트의 컴파일러로, Linux 계열 플랫폼의 표준 컴파일러로서 사용되고 있다. GNU는 소프트웨어 공개 개념을 표방하는 비제도권 단체인 자유 소프트웨어 재단(free software fundation)의 종합적인 프로젝트로, 쉽게 말해 컴퓨터 프로그램은 물론 모든 관련 정보를 돈을 주고 구입하는 것을 반대하는 프로젝트이다.

gcc에 대한 명령어는 매우 많지만 우리가 자주 사용하는 명령어는 많지 않으므로 그 내용만 다루고 나머지 명령어는 하단에 링크를 첨부해 둘 테니 거기서 확인하면 된다.명령어 결과, 목적 gcc-c-oobject.oobject.o(목적 파일) 생성 라이브러리나 실행 파일을 만들기 위한 목적 파일 생성 ▶-c: 링크는 하지 않고 컴파일과 어셈블만 행함. ▶-o: -o 의 형태로 사용하여 형태의 출력 파일을 작성. 예제에서는 “object.o” 라고 하는 목적 파일 형식의 출력 파일을 작성한다.

상기 명령어를 정리하고 해석하면, ‘object.c 파일을 컴파일 및 어셈블해 object.o라고 하는 목적의 파일 형태의 출력 파일을 생성한다’라 할 수 있다. 목적 파일을 생성한 소스코드 파일(.c)이 수정되면 다시 컴파일하여 목적 파일을 재생성 하여야 한다.arr libmylib.ascheduling.oqueue.otask.olibmylib.a(라이브러리 파일) 생성 컴파일 시간에 코드를 포함하여 실행 파일을 생성하는 정적 라이브러리 파일 생성 ▶ ar: 라이브러리 지정 옵션.라이브러리와 관련된 처리를 할 경우에는 gcc가 아닌 ar 명령어를 사용한다.▶ r: 정적 라이브러리 파일(.a)을 생성한다.

라이브러리란 자주 사용하는 함수에 대한 목적 파일을 묶어 놓은 것을 의미하며, 정적 라이브러리(Static Library)는 프로그램을 작성하고 컴파일하며, 링크 단계에서 라이브러리를 실행 파일에 복사해서 포함시키는 것이다. 이때 실행 파일의 크기가 커진다는 단점은 있지만 별도의 추가 작업 없이 라이브러리의 기능을 사용할 수 있다는 점과 실행 파일에 포함되어 있기 때문에 라이브러리가 올바른 버전이라는 확신을 가질 수 있다는 장점이 있다.반대로 동적 라이브러리(Dynamic Library)는 이름 그대로 실행 파일에 연결되지 않고 동적으로 프로그램이 실행될 때 연결하거나 런타임 중에 연결하여 사용할 수 있는 라이브러리이다. 정적 라이브러리와 달리 실행 파일에 포함되지 않기 때문에 실행 파일의 크기가 크지 않고, 완전히 다른 기능을 묶어서 다른 프로그램에도 사용할 수 있도록 배포를 할 수도 있다. 그러나 정적 라이브러리에 비해 사용법이 까다롭다.

해당 라인에 포함된 모든 목적 파일을 묶은 정적 라이브러리 파일을 생성하고, 실제로 사용할 때는 앞의 lib와 뒤의 .a를 제거한 “mylib” 형태로 사용한다. 목적 파일 때와 마찬가지로 안에 속한 목적 파일 중 하나라도 수정된 경우 라이브러리 파일을 다시 만들어야 한다.gcc-pthread-omyscheobject.c-lmylib-L.mysche(실행 파일) 생성, 실제로 사용 가능한 실행 파일을 생성▶-pthread:pthread.h를 사용하는 파일을 컴파일 하는 것을 명시한다.▶ -l : 위에는 -lmylib이라고 써있는데 -l+mylib을 의미한다. 표준 라이브러리가 아닌 라이브러리를 지정할 때 사용한다.▶-L. :리눅스는 라이브러리 파일을 찾을 때 ‘lib’, ‘usrlocallib’ 로 라이브러리 파일을 탐색한다. 사용자가 정의한 라이브러리를 참조할 때는 -L과 직접적인 디렉토리 경로를 지정하고, 현재의 디렉토리를 지칭할 때는 -L.과 같이 ‘.’만 쓰면 된다.

상기 명령어를 정리하여 해석하면, “pthread를 사용한 object.c 파일과 디렉터리에 있는 mylib 라이브러리를 포함해 mysche 라는 이름으로 실행 파일을 생성하시오” 라고 말할 수 있다. myschein.txtmysche 실행 만든 실행 파일▶.: 미리 작성한 실행 파일을 실행한다.

지금은 메인 코드와 라이브러리를 모두 포함해 만든 최종 결과를 실행하는 단계다. 본인이 코딩한 내용에 따라 터미널 또는 출력 파일에 결과가 나타난다. 필자의 코드는 커맨드 라인에 “in.txt”라고 하는 파일을 인자로 전달해 주어야 하기 때문에 위와 같이 실행했다. 명령줄 인수가 존재하지 않을 경우에는 .mysche와 같이 사용하면 된다.

[gcc 명령어 사용 강좌] 전 페이지 다음 페이지에 게재된 gcc와 make 강좌 저자 : 이만영(geoman), 역자 : 조한석(junye) v1.0, 1997년 6월 11일 수요일, 이 문서는 나우누리 ‘Linux 사용자의 모임’ 12-2번 강좌라는 게시판에 게재된 이만영 님의 강좌 ‘junyeml’, 1997년 6월 11일 수요일, 이 문서는 나우누리 ‘Linux 사용자 모임’을 ‘Linux 사용자 모임’12-2번 강좌’이라고 합니다. 참고문헌 Running LINUX (Matt Welsh, Lar Kaufman), “올레리 출판사” 1.1 C와 gcc의 관계 1.2gcc에 관한 이야기 2.gcc 강좌 2.1gcc에… wiki.kldp.org