eCos系统无法正确链接到在C++源文件里自己定义的cyg_user_start函数的问题和解决的方法
在C++源文件里定义cyg_user_start函数前,将其声明成C函数。就可以解决这个问题。
eCos官网:http://ecos.sourceware.org
eCos中文技术网:http://www.52ecos.net
eCos交流QQ群:144940146。http://blog.csdn.net/zoomdy/article/details/39396085
mingdu.zheng<at>gmail<dot>com
问题:
在C++源文件里定义cyg_user_start。依照预期终于编译出来的eCos应用在系统初始化后进入该函数,实际执行结果不是。通过调试发现总是进入eCos系统位于infra/<versin>/src/userstart.cxx的默认的cyg_user_start函数。
解决:
在定义cyg_user_start函数前,将其声明成C函数。
#include <cyg/infra/cyg_type.h>
externC void cyg_user_start( void ); // 声明成C函数
void cyg_user_start(void)
{
……
}
解释:
C++因为须要支持函数重载。因此C++编译器会对函数名进行名称转换,在C++中void cyg_user_start(void)的终于符号名为_Z14cyg_user_startv,而链接器是仅仅认识符号名的,对于连接器而言_Z14cyg_user_startv和cyg_user_start是两个不同的函数,因此不能正确链接到自己定义的cyg_user_start函数,使用externC(cyg_type.h中定义的宏,在C++中展开为extern "C")将cyg_user_start函数声明为C函数。C++编译器不会对声明为C函数的函数进行名称转换,void
cyg_user_start(void)的终于符号名依旧为cyg_user_start。
使用nm查看生成的.o文件能够查看符号表。通过查看符号表能够发现这个问题。
eCos系统无法正确链接到在C++源文件里自己定义的cyg_user_start函数的问题和解决的方法的更多相关文章
- SQL SERVER 2012/2014 链接到 SQL SERVER 2000的各种坑
本文总结一下SQL SERVER 2012/2014链接到SQL SERVER 2000的各种坑,都是在实际应用中遇到的疑难杂症.可能会有人说怎么还在用SQL SERVER 2000,为什么不升级呢? ...
- 使用Powershell链接到Office 365
今天主要讲使用Powershell管理Office 365 可以分为office365用户管理,Exchange Online的管理等 1. 使用Powershell 链接到office 365 用户 ...
- java程序链接到sql server数据库
package jianhua; import java.sql.*; public class ConDatabase { public static void main(String[] args ...
- MVC Controller 链接到 API Controller 以及反向链接
MVC Controller 链接到 API Controller 以及反向链接 问题 想创建一个从 ASP.NET MVC controller 到 ASP.NET Web API controll ...
- Oracle中使用透明网关链接到Sqlserver[Z]
Oracle中使用透明网关链接到Sqlserver 在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的O ...
- SharePoint 2010 中创建超链接到Pop-Up对话框
SharePoint 2010 中创建超链接到Pop-Up对话框 SharePoint 2010 推出了新式的带有阴影的弹出对话框,你感觉怎么样?我感觉倒是挺酷的.这样少打开了一个页面 ...
- Oracle中使用透明网关链接到Sqlserver(转)
测试环境介绍 1.ORACLEServer Database version:10.2.0 IP:192.168.1.5 ORACLE_HOME:D:\oracle\product\10.2.0\ ...
- Windows Azure Web Site (19) Azure Web App链接到VSTS
<Windows Azure Platform 系列文章目录> 之前遇到一个问题,客户在海外使用 我参考了一下国内Azure China的文档:https://school.azure.c ...
- [水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接
问题 想创建一个从 ASP.NET MVC controller 到 ASP.NET Web API controller 的直接链接,或者反向链接. 解决方案 可以使用 System.Web.Htt ...
随机推荐
- CF10D LCIS (动态规划)
题目链接 Solution 动态规划. 令 \(f_{i,j}\) 表示 \(a\) 数组前 \(i\) 个和 \(b\) 数组前 \(j\) 所得的最长的 LCIS . 转移很好想: \(a_i!= ...
- Java面试题之CyclicBarrier和CountDownLatch的区别
1.CyclicBarrier的某个线程运行到某个点后停止运行,直到所有线程都达到同一个点,所有线程才会重新运行: CountDownLatch线程运行到某个点后,计数值-1,该线程继续运行,直到计数 ...
- 调用SMTP发送有附件的邮件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 生活大爆炸版锤子剪刀布(NOIP2014)(真·模拟)
水!水!!水!!!(重要的事情说三遍..) 1分钟代码题.. 原题传送门 这题啊,手打BOOL判断,然后乱搞啊.. 这有什么难的.. 加个快读就能拿第一啦.. 膜9018上各位大佬们.. 下面贴代码 ...
- 安装ubuntu配置ssh
vmware安装ubuntu后,必须配置网卡,重新设置MAC,否则无法连接网络(具体方法百度)NAT直连模式xshell连接时host为ifconfig显示的IP地址,不需要设置端口转发,端口还是22 ...
- android hook 框架 xposed 如何实现注入
Android so注入-libinject2 简介.编译.运行 Android so注入-libinject2 如何实现so注入 Android so注入-Libinject 如何实现so注入 A ...
- 获取dnspod指定域名的记录
#!/usr/bin/python #-*- coding: utf-8 -*- import os,requests,json import re,time,xlsxwriter #时间 date= ...
- linux Centos7 安装Samba服务
1. 使用Samba服务器需要防火墙开放以下端口 UDP 137 UDP 138 TCP 139 TCP 445 如果碰到 “Unable to save xxxxxxxx 拒绝访问” 的提示,还有最 ...
- IE浏览器对虚拟主机配置域名的问题
之前一直搞不明白web开发做本地调试的时候IE浏览器老是无法登陆,而谷歌和其他内核浏览器能正常登陆的问题,后来发现IE浏览器对WEB服务器配置的虚拟主机域名规则是不能包含这个'_'下划线符号的,否则会 ...
- Segment Tree
姑且叫这种数据结构这个名字 #include<iostream> #include<cstdio> #define N 200005 #define Lson ret<& ...