2013-01-22 140 views
2

我試圖移植Linux庫以在VxWorks上運行。我已經成功構建了binutils和gcc,目標爲i486-wrs-vxworks,我可以成功構建一個簡單的C程序。但是,當我嘗試編譯C++時,事情就會中斷。針對VxWorks的GCC交叉編譯器無法編譯C++

我有一個簡單的Hello World程序:

#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 /本地/ 1486-WRS-的VxWorks內yvals.h'的'/包括/ yvals.h' - 通常這些系統文件做包括後來一個又一個......不幸的是,我不t知道你的問題的答案,所以我只能沿着我調查的路徑引導你。 –

回答

0

我通過最近的交叉編譯噩夢(不相關的VxWorks)我只是代替yvals.h,我是有STDDEF.H悲痛去了。問題原來是我需要指定系統頭文件的包含路徑。

下面是我用來解決我的錯誤消息的步驟。隨意修改適當的。

創建foo.c文件

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

int main (void) { 
    return 0; 
} 

與您所選擇的編譯器編譯它

$(CC) foo.c -E 

注意包含路徑,它使用和使用

它們設置爲你的系統頭文件列表
-isystem <include path> 

選項。

希望這會有所幫助。

1

您正在使用哪個版本的VxWorks?

我有一個模糊的回憶,在過去VxWorks的升級版本時,有在yvals.h這是我需要解決一個語法錯誤,並將其固定在後續的版本。

此外,您還可以從WindRiver公司gcc的交叉編譯器預建。只需使用您的許可證號登錄windriver.com/support,然後前往您的產品版本的「下載」。