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中以下描述:
这时候,再去查看configAll.h,才发现确实未定义INCLUDE_CPLUS_STRING宏。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.
结论:对编译过程、库、gcc了解太少了,查起这种问题,根本没有头绪。
- VxWorks上的STL错误
- VxWorks上STL的效率
- 市面上常见的vxworks书籍
- 在虚拟机上跑vxworks的总结
- 整理Vmware上安装vxWorks的流程
- Goahead webServer在vxworks上的移植
- VxWorks在S3C2410上的BSP设计
- VxWorks上tShell和hostshell的区别
- 万恶的STL错误
- vxworks错误调试
- vxworks错误码解读
- vmWare上运行VxWorks
- Vmware上安装VxWorks
- vmWare上运行VxWorks
- Vxworks的IDE“Tornado”在Win7上的安装教程
- vxworks添加键盘的data access访问错误
- vxworks parse error near int类似错误的解决办法
- VxWorks在EasyARM2200和SmartARM2200上的移植zz
- 心情/摘
- P2P 之 UDP穿透NAT的原理与实现(附源代码)
- ASP中对大字段的存取AppendChunk和GetChunk
- VB中对大字段的存取AppendChunk和GetChunk
- VB(EXE)/VC(DLL)混合编程实例
- VxWorks上的STL错误
- SQL Server 2000之日志传送功能 - 描述(1)
- 国足、苏丹红、赞助商
- SQL Server 2000之日志传送功能 - 设定(2)
- SQL Server 2000之日志传送功能 - 问题解决
- SQL Server 2000之日志传送功能 - 设定(1)
- SQL Server 2000之日志传送功能 - 设定(3)
- SQL Server 2000之日志传送功能 - 描述(2)
- 一个简单的线程类