VxWorks中文FAQ - 下载本文

告的方法就是把文件看作是C++文件,参数为

-x c++.(From: Claudio Ortega, cortega@sinfomed.org.ar)-Wall不能真正打开所有的警告,我采用由Bruce Evans推荐的参数

而且在FreeBSD环境下,BDECFLAGS变量比较固定。# BDECFLAGS are a set of gcc warning settings that Bruce Evans has suggested

# for use in developing FreeBSD and testing changes. They can be used by

# putting \ -Wconversion is not

# included here due to compiler bugs, eg: mkdir()'s mode_t argument. #

BDECFLAGS= -W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align \\

-Wcast-qual -Wchar-subscripts -Winline \\ -Wmissing-prototypes -Wnested-externs -Wpointer-arith \\

-Wredundant-decls -Wshadow

-Wstrict-prototypes -Wwrite-stringsThis set of flags is *much* pickier than -Wall alone.

(From: W Gerald Hicks)2.1.4 当编译我的模块时一切都是好的,但是当我试图下载时得到一个错误:missing symbol \?

A:在你的模块里可能有个main函数,根据PPC \Application Binary Interface\

标准,main函数必须调用__eabi函数,该函数为运行你的程序设置必要的运行环境。

由于这个原因GNU编译器在main函数里插入 __eabi函数。

Tornado不提供该函数,因为在实时环境下,你不必写main函数。VxWorks在应用程序运行前已经设置 好运行环境了,不再需要main函数了。

(From: Ilia, iliab@telegate.co.il)2.1.5 我生成了2.95.2版本的编译器,一切正常,但当我开始链接我的映象时,出现了错误,下面是我

链接ctdt表时的错误:

ctdt.o(.data+0x3c):fake: undefined reference to `global constructors keyed to _constructor_name_

... 许多类似的错误,有谁见过这种错误吗?A: 该问题是由gcc(ver2.7.2-2.95.2)试图改变它得到静态构造函数的方法引起的。它不再对每个构造静

态对象的模块消除函数,该方法是vxworks在编译链接过程中采用的方法。

你可以按如下修改gcc 2.95.2源代码后,恢复原先的操作。 in [source code dir]/gcc/config/arm/vxarm.h, at the very end, add:-

/* More DK patches: we undef these two in order to force the */

/* compiler to output our static constructors and destructors */

/* in the fashion to which it is accustomed.... */#undef ASM_OUTPUT_CONSTRUCTOR

#undef ASM_OUTPUT_DESTRUCTOR/* This one is so that GLOBAL_THING gets a $ in it's name */

#undef NO_DOLLAR_IN_LABEL现在更换到你的编译目录,敲入make clean命令,然后重新编译和安装编译器。我采用这种方法是可以的

,PPC版本的。它使得编译器使用老的方法来making munchable constructors。 希望对你也有帮助。

(From: Dave Korn)2.1.6 在我编译时,我在编译窗口看到如下输出:

nm386 -g partialImage.o

@B:\\Sources\\Components\\Common\\Common_Geni_Test\\Src\\prjObjs.lst | \\

wtxtcl D:\\Tornado\\host\\src\\hutils\\munch.tcl -asm 386 > ctdt.c ...

cc386 -nostdlib -r -Wl,-X partialImage.o ctdt.o -o VxWorksGeniServerTestExe.out

最后一步(linking partialImage.o to ...out)花了很长时间(半个小时),谁有解决办法?

A: 这个可能是munching过程,而不是链接,花了半小时。有人曾贴了一个小窍门来加速。

在munch命令管道里使用\如:nm386 -g partialImage.o

@B:\\Sources\\Components\\Common\\Common_Geni_Test\\Src\\prjObjs.lst | grep GLOBAL | \\

wtxtcl D:\\Tornado\\host\\src\\hutils\\munch.tcl -asm 386 > ctdt.c(From: Dave Korn)2.1.7 怎样定义一个没有空洞的结构。

Q: How do define a structure without holes in it?A: 我在vxworks中使用GNU编译器 struct ex { INT8 source;

INT32 txSize; INT32 datSize; INT16 cmd;

} __attribute__ ((packed));typedef struct ex PackedStruct; 注意:如果可能,避免使用-fpack-struct编译器开关。我门最近移除了这个选项,使得我们的C++程序提

高了30%-100%的性能。这是因为每次存取结构或类里多字节值时,都是一个一个字节操作的。可以使用 __attribute__ ((packed)) 方