error LNK2019 발생


최악의 링크 에러....


이에 대한 내용은 정리를 너무나 잘해 놓으신 분이 계셔서 그 글로 대체한다.



http://sadiles.blog.me/10072075057


컴파일 에러는 너무나 사람을 지치게 한다. 기껏 코딩해 놨더니 왜 컴파일이 안돼...


이번에 나온 오류는 


error C2220: warning treated as error - no 'object' file generated    요놈이다.


MSDN 참고 링크 

https://msdn.microsoft.com/ko-kr/library/ksk5k0ta(v=vs.120).aspx


컴파일러 오류 C2220

Visual Studio 2013
경고가 오류로 처리되어 생성된 개체 파일이 없습니다.

/WX는 컴파일러가 모든 경고를 오류로 처리하도록 합니다. 오류가 발생했기 때문에, 개체나 실행 파일이 생성되지 않았습니다.

오류는 /WX 플래그가 설정될 때에만 나타나고 경고는 컴파일하는 동안에 발생 합니다. 이 오류를 해결 하려면, 프로젝트의 모든 경고를 제거 해야 합니다.

해결하려면, 다음 방법 중 하나를 사용합니다

  • 프로젝트에서 경고를 발생 시키는 문제를 해결 합니다.

  • 낮은 경고 수준에서 컴파일합니다 — 예를 들어 /W3 를 사용합니다 (/W4대신).

  • 경고 pragma를 사용하여 사용 안 함 또는 특정 경고를 표시 합니다.

  • 컴파일 하기 위해 /WX 사용하지 않습니다.

MSDN 왈 이렇다고 한다.


그니깐 warning을 error로 취급하고 있다는 것.



해결방안은 두 가지가 있다.


1. 뭔지도 모르지만 그냥 warning을 무시.


프로젝트 우클릭 후 Properties에 들어가자.

Project Settings - Configuration Properties - C/C++ - General - Treat Warnings as Errors 항목이

ALL로 되어 있다면 No로 바꾼다.


해결.



2. warning 이 왜 뜨는지 확인하고 이를 해결.


이 때 확인해야할 부분은 어떤 warning이 error로 취급받고 있냐는 것이다.

output이나 error list에서 warning부분을 살펴보면 발견할 수 있다.


본인의 에러는 아래와 같았다.


warning C4819: The file contains a character that cannot be represented in the current code page (949). Save the file in Unicode format to prevent data loss


인코딩에러....라는 뜻이다. 

해당 파일의 인코딩을 unicode - codepage 1200로 바꿔주면 문제해결.


visual studio에서 인코딩을 바꾸려면 FILE-Advanced save option 를 클릭하면 원하는 인코딩을 선택할 수 있다.


혹은 


#pragma warning ( disable : warning번호)  

를 헤더파일에 입력해 주면 된다. 본인의 경우 #pragma warning ( disable : 4819) 
















'개발 > C and C++' 카테고리의 다른 글

error LNK2019 발생  (0) 2016.06.16
C/C++ 에서 clock() 함수를 이용하여 수행시간 측정하기  (0) 2016.06.16

C/C++ 에서 clock() 함수를 이용하여 수행시간 측정하기에는 여러가지 방법이 있겠지만

본인이 가장 선호하고, 가장 간편한 방법을 소개한다.


자료구조 전공시간에 전공 도서에서 함수의 수행 시간 측정하는 코드를 처음 접하였다.

(아마도 호로비치 자료구조 책일듯?)


boolean operation을 수행하는 두 라이브러리의 속도를 비교하기 위해서 수행시간 측정을 하게 되었다. 



먼저 clock 함수에 대해 알아보자. 

아래는 C++ 레퍼런스 사이트에서 가져온 내용이다. (링크 참고 : http://www.cplusplus.com/reference/ctime/clock/ )


function

<ctime>

clock

clock_t clock (void);
Clock program
Returns the processor time consumed by the program.

The value returned is expressed in clock ticks, which are units of time of a constant but system-specific length (with a relation of CLOCKS_PER_SEC clock ticks per second).

The epoch used as reference by clock varies between systems, but it is related to the program execution (generally its launch). To calculate the actual processing time of a program, the value returned by clock shall be compared to a value returned by a previous call to the same function.

Parameters

none

Return Value

The number of clock ticks elapsed since an epoch related to the particular program execution.

On failure, the function returns a value of -1.

clock_t is a type defined in <ctime> as an alias of a fundamental arithmetic type.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* clock example: frequency of primes */
#include <stdio.h>      /* printf */
#include <time.h>       /* clock_t, clock, CLOCKS_PER_SEC */
#include <math.h>       /* sqrt */

int frequency_of_primes (int n) {
  int i,j;
  int freq=n-1;
  for (i=2; i<=n; ++i) for (j=sqrt(i);j>1;--j) if (i%j==0) {--freq; break;}
  return freq;
}

int main ()
{
  clock_t t;
  int f;
  t = clock();
  printf ("Calculating...\n");
  f = frequency_of_primes (99999);
  printf ("The number of primes lower than 100,000 is: %d\n",f);
  t = clock() - t;
  printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
  return 0;
}


Output:

Calculating...
The number of primes lower than 100,000 is: 9592
It took me 143 clicks (0.143000 seconds).




간략히 정리해보면, clock 함수는 time.h(c++에서는 ctime) 헤더 파일에 들어있다.


clock_t clock(void); 의 형태로 선언되어 있으며, 그 내부가 궁금한 분은 직접 찾아보기 바란다.

(참고로 Visual studio에서 F12키를 통해 내부 선언으로 찾아갈 수 있다.)


여기서 반환형인 clock_t는 


typedef long clock_t; 


와 같이 선언되어 있는데, 그냥 long이라고 생각하면 된다.


사용법은 위의 예제와 같다. 

측정시작한는 부분에 clock()을 변수에 저장한 뒤, 끝날 때 시간을 빼고 CLOCKS_PER_SEC으로 나눠주면 된다.

즉,

  t = clock();   // 측정 시작
  /* 측정할 함수,코드가 들어갈 자리 */

  t = clock() - t;
  printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);


와 같이 사용하면 된다.






+ Recent posts