설치파일을 받는다



그리고 설치하는데 그냥
다음다음 누르면서 설치

그 다음에 추가적으로 설치해야할 것들인데

그냥 다 체크하고 설치하기 ㄱㄱ

그러면 무슨창이 뜰텐데 Apply-Close 순으로 눌러준다

그리고 환경변수를 설정해줘야하는데


Path영역에 이렇게 설정해주자

cmd로 넘어가서 
gcc -v를 쳐주자

이렇게 나오면 성공!

이제 컴파일 옵션을 알아서 찾고
사용법은 리눅스 gcc와 비슷하다 참고!


gcc -static -g -o [file.exe] [file.c]
-static : 릴리즈 모드
-g : 디버깅 심볼 포함
1. 디버그 모드
- 통상적으로 비주얼 스튜디오에서 기본설정 되어있는 부분ㅜ
- 실행파일에 디버깅 정보를 삽입하여서 언제든지 디버깅이 가능하게 해준다.
- 그냥 풀어서 말하면 코드를 최적화하지 않아서 용량이 크다
- 어디까지나 개발용 버그를 다 찾으면 릴리즈로 배포

2. 릴리즈 모드
- 이제 프로그램을 다양한 목적(?)으로 배포하기 위해서 컴파일 하는 모드
- 코드를 최적화하여서 파일크기가 꽤 줄어듦
- 메모리 점유율도 낮아지고 속도에서도 빨라진다.

출처 : MSDN



#pragma comment(lib,"user32.lib")
#pragma comment(lib,"gdi32.lib")
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"Advapi32.lib")
#pragma comment(lib,"msimg32.lib")
#pragma comment(lib,"shell32.lib")

요런것들 추가할 때.. 그냥하면 안되더라

프로젝트 속성으로 가서 위와 같이 셋팅해준다.

MFC사용은 정적 라이브러리에서 MFC 사용으로 해준다. << 이게 핵심


그리고 나서


코드생성으로 가서 다중스레드로 바꿔주고

링커->입력으로 가서 추가 종속성에 lib파일들을 걸어준다.


추가 : GS-옵션도 넣어주자 GS옵션끄긴

사실 이게 맞는지 모르겠지만. 이렇게 해서 되었었음..


170811 추가

단순히 프로젝트 옵션 -> C/C++ -> 코드생성 -> 런타임 라이브러리를 다중스레드(/MT)로 바꿔준다.
1. 먼저 OpenSSL설치 파일 다운로드

2. 설치하고 프로젝트 속성을 아래와 같이 지정
- [C/C++ -> General -> Additional Include Directories] value: OpenSSL’s include directory in your machine
 (e.g C:\openssl\include)
- [Linker -> General -> Additional Library Directories] value: OpenSSL’s lib directory in your machine (e.g C:\openssl\lib)
- [Linker -> Input -> Additional Dependencies] value: libeay32.lib

3. 이후 소스파일에 #include<openssl/aes>와 같이 라이브러리 함수를 사용할 수 있다.



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h> // AF_INET 외부 네트워크 도메인
#include<sys/types.h>
#include<sys/socket.h>
#define MAXLINE 511
int main(int argc, char *argv[]) {
       int cli_sock;
       struct sockaddr_in serv_addr;
       int datalen;
       pid_t pid;
       char buf[MAXLINE + 1];
       int nbytes;
       if (argc != 3) {     //사용법 숙지
              printf("Usage : %s <IP> <Port> \n", argv[0]);
              exit(0);
       }
       cli_sock = socket(PF_INET, SOCK_STREAM, 0); //cli_sock을 소켓 파일 서술자로 만듭니다.
       if (cli_sock == -1) {
              perror("socket() error\n");
              exit(0);
       }
       memset(&serv_addr, 0, sizeof(serv_addr));
       serv_addr.sin_family = AF_INET;
       serv_addr.sin_addr.s_addr = inet_addr(argv[1]); //ip와
       serv_addr.sin_port = htons(atoi(argv[2])); //port의 입력
       if (connect(cli_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) { //서버에게 접근 시도
              perror("connect() error\n");
              exit(0);
       }
       if ((pid = fork()) == 1) { //다중 프로세스를 위한 fork함수. 자식 프로세스 생성
              perror("fork() error\n");
              exit(0);
       }
       else if (pid == 0) { //자식 프로세스 부분. stdin로 사용자가 입력한 문자를 buf에 저장하여 소켓에다
              while (1) {        //write 시스템콜을 이용해 server에게 문자를 보낸다. exit 입력시 종료
                     fgets(buf, sizeof(buf), stdin);
                     nbytes = strlen(buf);
                     write(cli_sock, buf, MAXLINE);
                     if ((strncmp, "exit", 4) == 0) {
                           puts("Good Bye.");
                           exit(0);
                     }
              }
              exit(0);
       }
       else if (pid>0) { //부모프로세스. server가 보낸 문자열을 받아 출력한다.
              while (1) {    //역시 exit 를 받을시 종료
                     if (nbytes = read(cli_sock, buf, MAXLINE) <0) {
                           perror("read() error\n");
                           exit(0);
                     }
                     printf("%s", buf);
                     if (strncmp(buf, "exit", 4) == 0)
                           exit(0);
              }
       }
       close(cli_sock);
       return 0;

}


+ Recent posts