VxWorks上的STL错误

自己动手封装VxWorks下C++基础类 VxWorks下采用C++构建Application可以使得程序更加利于维护,利用其提供的STL支持,可以省去大量的底层工作,大大加速软件的开发进度。Tornado完全支持C++开发,风河也提供了包括STL在内的丰富的C++组件,但由于VxWorks的系统调用是以C函数的形式给出的,用户在使用C++编写应用程序的时候并不能实现纯粹的面向对象的开发方式,所以有必要对VxWorks的系统调用用类进 阅读详情

我在程序中使用了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 Components By 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 Components Several C++ library components are also available.

GNU-Specific Library Support Components For 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了解太少了,查起这种问题,根本没有头绪。

C++程序员简历优化指南:从关键词到项目描述的实战技巧 在技术招聘中,一份优秀的简历是获得面试机会的关键。对于C++开发者而言,简历不仅是个人经历的罗列,更是技术能力与工程实践的系统性展示。其核心原理在于通过精准的技术关键词匹配招聘系统的筛选逻辑,并运用STAR法则等结构化方法清晰呈现项目价值。从技术价值角度看,一份合格的简历能有效证明候选人对C++语言特性、内存管理、并发编程等核心概念的掌握深度,以及解决实际性能优化、系统稳定性等复杂工程问题的能力。在应用场景上,无论是面向系统编程、后端服务还是嵌入式开发等不同领域,都需要针对性地突出相关技术栈和项目经验。本文 阅读详情

相关推荐

C++职业规划:Qt框架学习与主流就业市场需求分析

C++作为高性能系统编程的核心语言,其技术选型与职业路径规划是开发者面临的关键决策。从语言特性与标准库(STL)的原理出发,现代C++通过RAII、智能指针、lambda表达式等机制实现了资源安全与高效抽象,其技术价值在于构建高性能、低延迟的后端服务与系统软件。在应用场景上,互联网后端开发、游戏引擎、基础架构等领域更侧重于网络编程、并发模型与算法优化,而跨平台GUI开发则需专门的框架支持。本文聚焦Qt框架,分析其在工业控制、嵌入式GUI等领域的优势,并对比主流C++岗位(如后端开发、系统编程)的核心技能需求

weixin_34218890的博客 398

VxWorks上STL的效率

沉醉于STL强大的功能及其中的泛型编程思想,在VxWorks上写程序时使用了STL,一切都正常,除了在最后做性能测试时根本不相信程序怎么会那么慢。 为此,专门编写了下面的小程序做对比测试。先看测试结果: TestMap last: 201TestVector last: 116Test last: 2另外,还要注意生成的.o文件的大小: 只有test: 38K

C++舞者 4641

库卡机器人入门:核心概念、坐标系与KRL编程实践指南

工业机器人作为自动化产线的核心执行单元,其运动控制依赖于精确的坐标系系统与参数配置。理解世界坐标系、基坐标系和工具坐标系(TCP)是机器人精准定位的基础,其中工具坐标系的正确标定直接关系到末端执行器的作业精度。在工程实践中,负载数据的准确设置对于机器人动力学计算和运动平稳性至关重要。通过掌握这些核心概念与数据配置,并结合KRL(KUKA Robot Language)进行运动指令(如PTP、LIN)编程与逻辑控制,工程师能够高效完成搬运、焊接等常见任务。本文以库卡(KUKA)机器人为例,系统梳理了从系统架构

weixin_34252090的博客 422

c语言基本数据类型short、int、long、char、float、double

http://see.xidian.edu.cn/cpp/html/437.html   C 语言包含的数据类型如下图所示:   一、数据类型与“模子”  short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。   怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个东西叫藕煤器,拿着它在和好

Mark的专栏 2354

llama.cpp核心原理:C/C++ CPU推理与GGUF模型格式深度解析

大语言模型(LLM)本地化部署的核心挑战在于运行时确定性、内存可控性与跨平台兼容性。传统Python框架受限于解释器开销、GC不确定性及CUDA绑定,难以满足边缘设备、嵌入式系统和工业实时场景的严苛要求。llama.cpp以纯C/C++实现,通过零依赖构建、显式内存管理与硬件亲和设计,重构了CPU推理的技术范式;其配套的GGUF模型格式本质是内存映射协议,支持mmap零拷贝加载、量化内核直通与多后端统一抽象。结合CMake驱动的硬件能力探测与条件编译,该技术栈已成为轻量级、可审计、可嵌入的大模型落地事实标准

weixin_33676492的博客 432

Linux C/C++ 进阶实战:从系统编程到高性能服务开发

系统编程是理解计算机如何运行的核心,它涉及进程、线程、内存管理和I/O等底层机制。其原理在于操作系统通过抽象硬件资源,为应用程序提供稳定、安全的执行环境。掌握系统编程的技术价值在于能够开发出高性能、高可靠性的软件,如数据库、Web服务器和分布式系统。应用场景广泛,涵盖后端服务、AI基础设施和嵌入式开发等领域。本文聚焦于Linux C/C++开发,通过构建HTTP服务器、线程池等实战项目,深入讲解epoll、内存池等关键技术,帮助开发者从原理到实践,系统提升在高性能计算和系统软件领域的工程能力。

weixin_34199335的博客 432

vxWorks6.9应用开发时,C语言调用C++接口的一次记录

涉及环境:workbench3.3 、 vxWorks6.9 、 windows7 事件起因:项目组一直用C语言,最近有个模块修改,想使用标准C++ STL里的hash_map,于是新建了一个.cpp文件和.h文件(我们定义为my_hash.h)对hash_map功能进行封装,可是在其他.c文件中引用my_hash.h时却出现了错误,因为该h文件中包含了 #include <hash_m...

yk的博客 2111

具身智能机器人分拣系统:从架构设计到实时调度与桥接层实现

机器人系统通过感知、决策与执行的闭环实现自主操作,其核心在于将高层智能算法与底层实时控制无缝集成。这一原理催生了“大小脑”分层架构,其中“大脑”负责视觉识别与任务规划等认知功能,而“小脑”则专注于高频率、确定性的关节运动控制。这种架构的技术价值在于解决了复杂动态环境中(如物流分拣)的灵巧操作难题,实现了从固定自动化到自适应智能的跨越。应用场景广泛覆盖工业自动化、仓储物流及柔性制造等领域。本文聚焦于该架构中的关键工程实践——桥接层与实时调度,它们作为连接抽象规划与物理执行的核心枢纽,通过协议转换、轨迹插值与优

weixin_30645617的博客 396

试验Boost在Vxworks上的应用日记 一

许多人认为Boost库非常庞大,不适合在嵌入式开发中使用,因此一讲到嵌入式,Boost连想都不想直接pass,而且多是有经验的老程序员,但我觉得咱们中国人脑子里面的框框太多了,没有什么事不可以的,评价好坏也没有特定标准,Boost库经过长期发展,稳定、实用、好用,为什么不能做一下尝试,如果觉得Boost庞大,那STL也不小啊,又为什么用C++?既然用了C++这些代价其实都已经计算在内了...

weixin_33717117的博客 345

vxworks 6.8帮助文档

此文档为安装程序中所携带所有文档。

vxWorks开发环境构建步骤及开发资源

vxWorks开发环境构建步骤及开发资源

智能指针

【TOC】正文1. 智能指针背后的设计思想我们先来看一个简单的例子:void remodel(std::string & str) { std::string * ps = new std::string(str); ... if (weird_thing()) throw exception(); str = *ps; delete ps;

细心程度决定你的成败 571

从“跳变”到“连续”:深入理解霍尔传感器插值与PLL角度估算的优劣与选择

本文深入解析霍尔传感器角度估算技术,对比线性插值法和锁相环(PLL)跟踪法的优劣,为电机控制领域的工程师提供实用指南。通过STM32F407和CubeMX的实例,详细探讨两种方法的实现细节、性能对比及优化策略,帮助在不同应用场景下做出最优选择。

weixin_30855761的博客 557

嵌入式软件测试(十三)——数据竞争检测方法分析

本文探讨了嵌入式系统中数据竞争的成因、危害及应对策略。数据竞争指多个线程在未同步情况下并发访问共享内存(至少一个为写操作),可能导致系统崩溃、数据损坏等严重后果。检测方法包括:静态分析(早期筛查但误报率高)、动态分析(如ThreadSanitizer,准确性高但需运行时支持)和形式化验证(数学严格但复杂度高)。实践建议包括:最小化共享状态、正确使用原子操作/锁、分层测试策略(宿主机TSan检测+目标机压力测试),并将工具集成到开发流程中。通过设计优化、规范同步机制和多层次验证,可显著降低嵌入式系统的数据竞争

Dr.kangder的博客 422

在实战中学AI-车流量统计项目-YOLOV11车辆检测-YOLOV11模型的部署

考虑实际落地中部署推理资源消耗,速度与模型精度之间的均衡,同时,车辆属于比较通用场景的目标检测,我们将YOLOV11作为最终的模型选择,目前官方开源的模型基于coco数据集训练,里面已经包含了车辆相关类别,经测试,在监控视角下效果基本可用,所以,在落地过程中,我们先用这个模型来打通部署链路,后面再逐步优化模型性能。在Nvidia的硬件下做部署,部署框架优先选择官方框架TensorRT,下面重点讲述如何用TensorRT部署YOLOV11模型。

Aleo_优快云的博客 2166

DevEco Studio在初始化时出现Installing pnpm@8.13.1...npm ERR! code ETIMEDOUTnpm ERR! syscall connectnpm E

npm的仓库源设置的有问题,下载不了鸿蒙相关组件,所以你的启动依赖都没有,或者以前下载过npm,使用的源改的乱七八糟了。以前安装过前端相关的node.js的话,启动的时候记得使用管理远权限。(DevEco Studio)就出错,npm显示超时。

qq_56392862的博客 2628

Qt开发入门:从零到跨平台GUI低手

Qt开发入门:从零到跨平台GUI低手

Yusei_0523的博客 551

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 183

C++标准模板库(STL):常用算法

find()      ---algorithm中的函数 find(start,end,value) start搜寻的起点,end搜寻的终点,要寻找的value值 容器的表示方法(只有vector没有内置find()函数,其他容器都有,其他容器用自己的find()函数) find(a.begin(),a.end(),value) 数组的表示方法 find(a,a+length,...

lxcoding 621

YOLOV8主干改进方法:C2f-Dual——DualConv轻量化双卷积设计(附改进代码)

DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合3×3和1×1的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。DualConv利用组卷积技术高效排列卷积滤波器,大大降低了计算成本和参数数量。

m0_74890428的博客 4700

NVIDIA Isaac Sim 入门教程 - 运动生成控制器(Motion Generators)

机器人任务通常在任务空间中根据所需的末端执行器轨迹进行定义,而控制动作则在关节空间中执行。这自然会产生关节空间和任务空间(操作空间)控制方法。然而,要利用运动控制成功执行交互任务,往往需要对机械臂及其环境都建立精确的模型。虽然可以知道足够精确的机械臂模型,但很难获得详细的环境描述 [SSVO09]。可以通过在交互过程中引入顺应行为来克服这种不匹配造成的规划错误。虽然顺应性可以通过机器人的结构(如弹性致动器、软机械臂)被动实现,但我们对侧重于主动交互控制的控制器设计更感兴趣。这些设计大致分为注释。

2506_90492529的博客 1578

vxworks输入输出

在VxWorks卜,“文件”提供了访问设备的统一接口,因此是一种广义的概念,“文 件”名包括了两部分的信息.     所要访问设备的名称     所要访问的具体的文件(这个就是常规意义的文件了) iosFdShow显示的fd句柄中缺少0, 1和2这二个句柄,这二个 句柄和其它很多操作系统一样是保留给标准输入输出使用的:     0 stdin标准输入     1 stdout标准

学海无涯,回头是岸........ 3386

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4437
上一篇: Unresolved Symbol (转)
下一篇: VxWorks上STL的效率
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值