2013-01-22 1 views
2

VxWorks에서 실행되도록 Linux 라이브러리를 이식하려고합니다. 성공적으로 binutils와 gcc를 빌드하여 i486-wrs-vxworks으로 만들었고 간단한 C 프로그램을 성공적으로 빌드 할 수 있습니다. 그러나 C++을 컴파일하려고하면 문제가 발생합니다. VxWorks 용 GCC 크로스 컴파일러가 C++을 컴파일 할 수 없습니다.

내가 단순 안녕하세요 프로그램이 있습니다

#include <string> 
#include <iostream> 
int main() 
{ 
    std::string s = "Hello World"; 
    std::cout << s << std::endl; 
    return 0; 
} 

그것을 구축하기를, 내가 전화 :

i486-wrs-vxworks-gcc -I/home/kyle/vxworks-6.9/target/usr/h -I/home/kyle/vxworks-6.9/target/usr/h/c++ hello.cpp 

을이 항상 메시지와 함께 실패합니다

In file included from /home/kyle/vxworks-6.9/target/usr/h/c++/cerrno:4:0, 
      from /home/kyle/vxworks-6.9/target/usr/h/c++/xlocnum:4, 
      from /home/kyle/vxworks-6.9/target/usr/h/c++/ios:4, 
      from /home/kyle/vxworks-6.9/target/usr/h/c++/ostream:4, 
      from /home/kyle/vxworks-6.9/target/usr/h/c++/istream:4, 
      from /home/kyle/vxworks-6.9/target/usr/h/c++/string:4, 
      from hello.cpp:1: 
/usr/local/lib/gcc/i486-wrs-vxworks/4.6.4/../../../../i486-wrs-vxworks/include/yvals.h:4:24: fatal error: yvals.h: No such file or directory 

내가 가면 내면 /usr/local/i486-wrs-vxworks/include/yvals.h을 보면, 이것이 내가 본 것입니다.

/* yvals.h values header for conforming compilers on various systems */ 
#if (defined(__cplusplus) && defined(__GNUC__)) 
/* GCC C++ has it's own yvals.h */ 
#include_next <yvals.h> 
#else /* __cplusplus && __GNUC__ */ 
#ifndef _YVALS 
#define _YVALS 
#ifdef _NO_WINDRIVER_MODIFICATIONS 
#include <stdarg.h> 
#endif 
... 

yvals.h이 포함되어 있어야하지만 다른 곳에서는 찾을 수 없습니다. gcc를 올바르게 구축하지 못했거나이를 해결할 수있는 방법이 있습니까?

+0

'i486-wrs-vxworks-g ++'을 사용해 보셨습니까? –

+0

@MatsPetersson 예, 동일한 오류가 발생합니다. – kylem

+0

'/ usr/local/i486-wrs-vxworks/include/yvals.h' 안에'yvals.h'의 또 다른 include가 포함되어 있습니다 - 종종이 시스템 파일은 나중에 또 하나를 포함합니다 ... 불행히도, 귀하의 질문에 대한 답변을 모르기 때문에 조사 할 수있는 길만을 안내 할 수 있습니다. –

답변

0

필자는 yvals.h 대신 stddef.h를 사용하여 슬픔을 겪고있는 것을 제외하고는 최근 크로스 컴파일 악몽을 겪었습니다 (VxWorks와 관련 없음). 문제는 시스템 헤더 파일에 대한 포함 경로를 지정해야한다는 것으로 판명되었습니다.

다음은 내 오류 메시지를 해결하는 데 필요한 단계입니다. 언제든지 적절히 수정하십시오.

이 사용

$(CC) foo.c -E 

이 (가) 경로를 포함 참고

#include <stddef.h> /* The problem header file (yvals.h for you?) */ 

int main (void) { 
    return 0; 
} 

선택의 컴파일러로 컴파일 파일 foo.c를 작성하고

사용하여 시스템 헤더 파일 목록로 설정
-isystem <include path> 

옵션.

희망이 도움이됩니다.

1

어떤 버전의 VxWorks를 사용하고 있습니까?

이전에 VxWorks 버전을 업그레이드 할 때 yvals.h에서 구문 오류가 발생했기 때문에 해결할 필요가 있었고 후속 버전에서 수정 된 퍼지 기억이 있습니다.

또한 WindRiver에서 사전 빌드 된 gcc 크로스 컴파일러를 사용할 수 있습니다. 라이센스 번호로 windriver.com/support에 로그인하고 제품 버전의 "다운로드"로 이동하십시오.