我正在尝试将一个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失败了,还是有其他方法可以解决这个问题?
i486-wrs-vxworks-g++
吗? - Mats Petersson/usr/local/i486-wrs-vxworks/include/yvals.h
文件中是否有另一个yvals.h
的 include - 通常这些系统文件后面会包含另一个文件... 不幸的是,我不知道你问题的答案,所以我只能引导你沿着我调查的路径前进。 - Mats Petersson/usr/local/i486-wrs-vxworks/include/yvals.h
中有一行#include_next <yvals.h>
,这表明应该还有另一个yvals.h
文件...不幸的是,据我所知,它实际上并不存在。运行find / -name yvals.h
只返回我已经知道的yvals.h
文件。 - kylemyvals.h
看起来像是yacc
的输出,需要在构建系统中查找.y
文件和yacc
调用。 - Dmytro Sirenko