-std=c++0x -std=gnu++0x

 예제 프로그램을 컴파일 하려던 중 아래의 에러 메시지를 만났다.

Formatter.cpp:45: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Formatter.cpp:45: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x

 문제의 발단은 다음의 문구였다.

pthread_mutex_t dateLock = PTHREAD_MUTEX_INITIALIZER

 mutex 초기화를 위한 매크로 함수 PTHREAD_MUTEX_INITIALIZER 를 사용하기 위해서는 -std=c++0x 를 함께 사용하라는 메시지이다.

 즉, 문제 해결을 위해서는 g++에서는 다음의 옵셥을 g++ 과 함께 사용하면 된다.

 g++ -g -c -I../include  -std=c++0x -o test test.c

 

알수없는 에러….

 컴파일중 이상한 오류를 발견했다..

/usr/local/arm/arm-linux/sys-include/asm/fcntl.h:74: parse error before “pid_t”
/usr/local/arm/arm-linux/sys-include/asm/fcntl.h:80: parse error before “loff_t”
/usr/local/arm/arm-linux/sys-include/asm/fcntl.h:82: parse error before “l_pid”

 단순한 프로그램이었는데…이상했다.

 이렇게도 바꾸고 저렇게도 바꾸어서 원인을 찾았는데…

 답은 헤더 파일의 입력 순서에 있었다.

 원래는..

#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <asm/fcntl.h>
#include <stdio.h>

였는데…

이를 다음과 같이 바꾸니 문제가 해결되었다..

#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <asm/fcntl.h>
#include <stdio.h>

 개운하지가 않다.

 문제는 해결했는데 어찌 해결했는지를 모르겠다….

 분명 헤더파일의 입력때문에 뭔가가 엉킨것 같은데….꼭 집어내지를 못하겠다.

 

wrong # args: should be “for start test next command”

 Tcl/Tk 스크립트를 실행시키는 도중 에러메시지를 발견했다.

wrong # args: should be “for start test next command”
    while executing
“for {set k 0} {$i < $opt(nn)} {incr i}”
    (file “wireless2.tcl” line 163)

 무슨 내용일까…

 구글을 살펴 보았으나 이렇다 할 내용은 찾지 못했다…

 그러다가….정말 어이없는 실수가 눈에 들어왔다.

 이 구문이 말썽이었는데…

for {set i} {$i < $opt(nn)} {incr i}

 다음과 같이 바꿔 주었다.

for {set i} {$i < $opt(nn)} {incr i} {


 차이점을 알겠는가? 바로 마지막 중광호를 열고 안열고의 차이였다.

 C언어에서라면 금방 잡아 냈을 오류인데…이렇게 사용하는 언어가 다르니 에러메시지가 나타내는 뜻조차도 제대로 파악하지 못하고 있었다….

 반성하자…

우분투에서 gcc 컴파일러 관련 라이브러리 설치법

 우분투를 처음 설치하고 컴파일을 하려는 경우

 관련 패키지 혹은 헤더파일이 없다고 에러 메시지가 뜬다.

 이는 특정 패키지를 설치하면 문제가 해결된다.

sudo apt-get install build-essential

 명령어를 입력하면 필요한 패키지들이 자동으로 설치가 된다.