한달동안 붙잡고 있는 문제입니다. 고수분들 봐주삼..^^;;;;

안녕하세요. 고수님들…
제가 Pioneer 2-AT 로봇제어를 하기위해서 CARMEN이라는 오픈소스를
설치하려고 하는데 설치가 잘 되지 않습니다.
설치를 도와주세요 ㅠㅠ

아래와 같은 오류가 뜹니다.


  • Module : GLOBAL
  • Comment : CARMEN global functions

–> Starting make
---- Assigning dependencies in GLOBAL
---- Compiling global.c to global.o (cc)
cc1: warnings being treated as errors
global.c: In function ‘carmen_get_host’:
global.c:411: error: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result
make[3]: *** [global.o] 오류 1
exit: 7: Illegal number: -1
make[2]: *** [libraries] 오류 2
make[1]: *** [phase1] 오류 2
exit: 1: Illegal number: -1
make: *** [phase1] 오류 2

CARMEN에 대한 설명이 있는 사이트 입니다.

http://carmen.sourceforge.net/

참고로 카르멘 소스는 첨부파일로 첨부했습니다.

제 컴퓨터는 xnote e200 모델이고 사용하는 ubuntu 버전은 9.04입니다.

고수님들… HELP ME ~~~~~~ ^^;;

gcc버전을 3.4로 낮춰보고
관리자 모드로 다시 make를 해보니 아래와 같은 오류가 나타납니다.

==========================================================


  • Module : LOCALIZE
  • Comment : Markov Localization Module

–> Starting make
---- Assigning dependencies in LOCALIZE
---- Assigning dependencies in MODEL-LEARN
cc: mt-rand.cpp: C++ compiler not installed on this system
cc: basic.cpp: C++ compiler not installed on this system
cc: map.cpp: C++ compiler not installed on this system
cc: lowMap.cpp: C++ compiler not installed on this system
cc: low.cpp: C++ compiler not installed on this system
cc: learn.cpp: C++ compiler not installed on this system
cc: slam.cpp: C++ compiler not installed on this system
make[3]: *** [depend] 오류 1
exit: 1: Illegal number: -1
make[2]: *** [depend] 오류 2
make[1]: *** [phase1] 오류 2
exit: 1: Illegal number: -1
make: *** [phase1] 오류 2

C++ 컴파일러가 없다고하는데 무슨 말인지…

해결책을 알고계신 천하의 고수님들아 !!!
도와주세요 ㅠㅠ ^^;;

제가 하고 있는데 아래와 같은 관문에 또 막혔어요…
에러는 아래와 같아요


  • Module : MODEL-LEARN
  • Comment : A program for learning motion models.

–> Starting make
---- Compiling low.cpp to low.o (g++)
cc1plus: warnings being treated as errors
low.cpp: In function ‘void PrintMap(char*, TAncestor*, int, double, double, double)’:
low.cpp:971: error: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result
low.cpp:973: error: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result
low.cpp:975: error: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result
low.cpp: In function ‘void LowSlam(TPath**, TSenseLog**)’:
low.cpp:1174: error: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result
make[6]: *** [low.o] 오류 1
exit: 7: Illegal number: -1
make[5]: *** [binaries] 오류 2
make[4]: *** [all] 오류 2
make[3]: *** [model_learn/model_learner] 오류 2
exit: 7: Illegal number: -1
make[2]: *** [binaries] 오류 2
make[1]: *** [phase2] 오류 2
exit: 1: Illegal number: -1
make: *** [phase2] 오류 2

고수님앙~~~

처음에 사용했던 gcc 버젼(아마 4x 버젼)을 사용하시면서
./configure 에 --noWerror 옵션을
추가해서 다시 configure 하신뒤에 make 하시든지

아니면 바로 Makefile.conf 을 편집 -Werror 을 제거한후 make 해보세요.

CFLAGS += -Werror

CXXFLAGS += -Werror

에러의 원인은 경고 메시지를 에러로 보고
멈추도록 되어있는 -Werror 옵션때문입니다

CARMEN 소스코드를 살펴보진 않았지만
아마도 짐작하기에 소스의 많은 부분에서
함수의 리턴값을 체킹하지않고 있는듯 보이는데
그런부분이 나중에 알수없는 에러의 원인이 될가능성이 많죠.

-Werror 옵션의 목적도 그런 에러를 찾아내기 위해
사소해 보이는 경고 메시지 까지도 에러러 간주하고 컴파일을 멈추도록
지시하는 겁니다.

ignoring return value of ‘fscanf’, declared with attribute warn_unused_result

에러의 경우에는

사용된 fscanf함수의 리턴값을 체크하도록 소스를 바꾸어야
하는게 가장 근본적인 해결책이죠.

예컨대

           fscanf(blah blah); 

라면

            if(0 == fscanf(blah blah){ 
              printf("fscanf failed!"); 
        } 

등의 형태로 말이죠.

gcc 3버젼에서 에러난것도 같은 에러입니다.

low.cpp:971: error: ignoring return value of ‘int system(const char*)

근본적인 해결책은 int system(const char*)의 리턴값을 체크하도록 소스를
바꾸는 것이고 아니면 단순히 -Werror옵션을 끄면 됩니다.

  1. gcc3.4 컴파일러를 설치했어도 g++3.4 가 설치되는 것은 아닙니다.
    현재 우분투 배포본에서 g++34 를 설치할수 없습니다. (직접 gcc 소스를 컴파일 및 설치를 하면 가능하나… 비추)

  2. Makefile.conf 파일내에 있는 -Werror 옵션을 모두 지우고 다시

make clean;
configure
make

  1. 제가 gcc 4 버젼으로 컴파일 해본결과 … 잘 됨.