用于VxWorks的GCC交叉编译器无法编译C ++

时间:2013-01-22 17:49:28

标签: c++ gcc cross-compiling vxworks

我正在尝试移植Linux库以在VxWorks上运行。我已经成功构建了binutils和gcc来定位 i486-wrs-vxworks ,我可以成功构建一个简单的C程序。但是,当我尝试编译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时失败了,还是有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的VxWorks?

我有一个模糊的回忆,在过去升级VxWorks版本时,yvals.h中存在语法错误,我需要解决这个问题并在后续版本中修复。

此外,您可以从WindRiver预先构建gcc交叉编译器。只需使用您的许可证号码登录windriver.com/support,然后前往产品版本的“下载”。

答案 1 :(得分: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>

选项。

希望这有帮助。