VxWorks上的STL错误

来源:互联网 发布:查看linux下tomcat版本 编辑:程序博客网 时间:2024/03/29 18:24

我在程序中使用了STL,但是下载时,出现了链接错误:

Errors while downloading PPCEC603gnu/Project1.out: clone__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b1i03Rep eos__t18string_char_traits1Zc replace__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b1i0UiUiPCcUi _t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b1i0$nilRep __dl__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b1i03RepPv length__t18string_char_traits1ZcPCc assign__t18string_char_traits1ZcRcRCc

程序代码如下:

#include <iostream>#include <string>#include <map>#include <vector>#include <cstdio>using namespace std;int main(void){map<int, int> mapInt;mapInt[12] = 1222;mapInt[13] = 1333;if (1222 == mapInt[12])cerr << "Right!/n";if (1333 == mapInt[13]) cerr << "Right!/n";string str = "hello";printf("%s/n", str.c_str());vector<int> arrInt;arrInt.push_back(2);arrInt.push_back(3);vector<int>::iterator itArrInt;for (itArrInt = arrInt.begin(); itArrInt != arrInt.end(); ++itArrInt){cerr << *itArrInt << "/t";}cerr << endl;return 0;}
但是,VxWorks是支持STL的。在VxWorks Programmer's Guide中有明确表明STL:

Standard Template Library (STL) For both toolchains, the Standard Template library consists entirely of a set of header files. There is no special run-time component that must be included in a VxWorks system.

STL for GNU The GNU STL port for VxWorks is thread safe at the class level. This means that the client has to provide explicit locking, if two tasks want to use the same container object (a semaphore can be used to do so; see 2.3.3 Semaphores). However, two different objects of the same STL container class can be accessed concurrently.

The C++ Standard Template Library can be used in client code compiled with exception handling turned off. In our implementation this has the following semantics:

For all checks that could reasonably be made by the caller, such as bounds checking, no action is taken where an exception would have been thrown. With optimization on, this is equivalent to removing the check. For memory exhaustion where bad_alloc would have been thrown, now the following message is logged (if logging is included): "STL Memory allocation failed and exceptions disabled -calling terminate" and the task calls terminate. This behavior applies only to the default allocators; you are free to define custom allocators with a different behavior.

在FAQ上也发现,它是支持STL的,只不过会使代码显得比较大:

Q. When compiling C++ code (STL) the object size explodes

A: People are confusing C++ with STL. They are not the same. There is an embedded C++ standard that will significantly reduce the size of an executable if you follow the restrictions.

Compile with "-fno-exceptions". If you are using templates that require exceptions handling, i suggest you don't. Alternatively, you can look that the offending vxWorks STL file (maybe stl_alloc.h) and there is an "if 0" condition that should be changed to "if 1". Also disable RTTI with "-fno-rtti" as the another poster noted. You might also consider using "-fno-volatile", etc.

If you don't use templates, but just classes and polymorphism, you can make your own collections that are significantly smaller than STL. (even when you do use templates).

Other alternatives might be to look at PJ Plaugher's STL.

(From: Bill Pringlemeir, spam_account@sympatico.ca)

而且,对于set, map, vector,都没有报错,只有string报错。经过反复查找资料,才确定只与string无关,与STL有关,并且在programmer's guide中以下描述:

7.2.2 Adding Support ComponentsBy default, VxWorks kernels contain only minimal C++ support. You can add C++ functionality by including any or all of the following components:

Basic Support Components...

C++ Library ComponentsSeveral C++ library components are also available.

GNU-Specific Library Support ComponentsFor the GNU compiler, these are:

INCLUDE_CPLUS Includes all basic C++ run-time support in VxWorks. This enables you to download and run compiled and munched C++ modules.

INCLUDE_CPLUS_STL Includes support for the standard template library.

INCLUDE_CPLUS_STRING Includes the basic components of the string type library.

这时候,再去查看configAll.h,才发现确实未定义INCLUDE_CPLUS_STRING宏。

结论:对编译过程、库、gcc了解太少了,查起这种问题,根本没有头绪。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子一生下来脖子上有淋巴结怎么办 满月宝宝睡觉不踏实易惊醒怎么办 两个月宝宝从婴儿车上掉下来怎么办 兔子不吃兔粮不喝水不拉粑粑怎么办 兔子吃了带水的菜叶怎么办 七个月的宝宝晚上睡觉总醒怎么办 紫薯和番茄一起吃了怎么办 1当半宝宝喝温开水后打隔怎么办 婴儿屁股拉便便肛门有点烂了怎么办 婴儿便便之后肛门就红怎么办 50天的宝宝三天不拉大便怎么办 两个月宝宝不拉屎只放屁怎么办 两个月大宝宝两天没拉屎怎么办 两个月宝宝三天没拉大便怎么办 5个月宝宝3天没拉大便怎么办 4个月宝宝3天没拉大便怎么办 20个月的宝宝大便干燥怎么办 20个月宝宝大便间隔三天怎么办 两个多月的宝宝四天没大便怎么办 两个多月的宝宝几天没大便怎么办 2个月3天没大便怎么办 两个月大的宝宝发烧40度怎么办 两个月大的宝宝感冒了怎么办 四个月宝宝拉水样大便要怎么办 六个月的宝宝咳嗽有痰怎么办 未满月的宝宝大便脓状怎么办 五个月的宝宝总是吃手怎么办 小孩子学数字怎么也学不会怎么办 小孩学数字老是学不会该怎么办 只买了大人票忘买儿童的了怎么办 铝合金滑动门没轨道安纱门怎么办 移门衣柜门与柜体有冶缝隙怎么办 推拉门关门时撞门框声音大怎么办 两岁宝宝夏天不盖被子怎么办 家里有好多会爬的小黑虫怎么办 刚贴的壁纸怎么发霉了怎么办 晚上睡觉一熄灯有许多小虫子怎么办 一岁宝宝夏天爱哭不爱吃饭怎么办 合肥房子卖了户口没地方迁怎么办 忌作灶的日子新房装橱柜了怎么办 刮水泥浆的墙面刮不住腻子怎么办