【DSP开发】DSP能用VS2010生成的链接库文件吗?


声明:引用请注明出处http://blog.csdn.net/lg1259156776/


说明:可能这个问题让行家看上去就会莞尔一笑,但是很多时候在开发中经常被这种莫名其妙的想法给迷住,实际上是对其中涉及到的一些基本概念和原理不太清楚所致,本文将对这个问题进行详细的分析。


我们有时说C/C++语言是源码级别的跨平台,主要是指的是在不同的操作系统平台上,编译器所支持的语法是相同的,对应的函数接口是相同的,但是对应到下面的库文件、可执行文件则是平台相关的。这也就是为何安装配置opepcv的时候,利用cmake生成相应的平台下的工程文件或者makefile,然后进行编译运行,生成对应平台相关的库文件。而库文件实际上参与到链接的阶段,基本上算是等同于经过了编译、汇编后生成的目标文件(.o或.obj),而经过汇编之后生成的就是对应的机器码了,所以说库文件是平台相关的。

明白了上面的道理,我们来看这个问题,实际上就直接不是问题了,因为VS2010生成的是windows下的机器码,而CCS3.3或CCS5.4生成的是DSP目标处理器上的机器码。这两个平台根本不一样。

举个例子,运行时库,对应的DSP的不同平台,其运行时库都不一样,更别提windows了。运行时库中就包含着对应C语言规范中定义的各种库函数等等。

所以,想直接利用VS2010生成的库,那可能没那么简单。不妨可以试一试,利用VS2010生成一个简单的函数库,实现加法,然后将生成的库拷贝到DSP开发环境CCS工程下,包含引用,并参与编译链接,看看能否编译通过,并且成功下载到DSP运行。

这里还要说明一点,我现在并不太清楚对DSP是不是有动态链接库的概念,可能也有,但感觉好像得是静态链接库才行?这一点存疑,具体编译原理还没有弄太懂,回头再补上。

最好的方法,还是将对应的源文件,拷贝到CCS中,创建生成库的工程,修改代码重新编译链接后生成相应的库,然后才能安心的使用。

感觉:有点没太理解这个内容,现在发现越来越迷糊,这文章估计不对说的。不,很难讲!

在windows下配置了gcc,然后可以生成可执行文件.exe,这个exe文件到底是啥?真的是所谓的机器码,二进制码吗?怎么感觉不像呢?exe真的是运行在硬件之上吗?哭了!

【2015-10-22增】经过初步测试,使用CCS编译生成的静态链接库,使用MinGW基于windows下的gcc进行链接,使用命令ar t xx.lib可以解析出对应的obj文件,也可以通过ar -v -x xx.lib将目标文件解析出来。但是再进行解读obj文件时会发生错误,说是没有组织。而且在调用这个库中的文件时,也会出现问题没有发现对应函数的问题。

这说明了一个问题,就是不同的编译器在同一个操作系统之上采用的归档格式可能是一样的,因此可以解析出lib文件中所包含的obj文件,但是obj文件却是与目标处理器相关的。CCS生成的obj文件中包含的是对应DSP64xx的机器码,而MinGW的gcc则包含的是intel的处理器的机器码。所以库文件是编译器、处理器、操作系统相关的,并不能通用,而只能实现对应相同的函数接口,在不同的平台上(指的是编译器、处理器、操作系统)上要有相对应的库文件才能使用。

另外,还想再说一点,对于库,要注意以下几点:

1. 静态还是动态?

2. 导出函数与导出全局变量的声明和定义方式;

3. 动态链接库的入口函数定义;


2015-10-25心得总结 张朋艺

【DSP开发】DSP能用VS2010生成的链接库文件吗?的更多相关文章

  1. 【Linux开发】【DSP开发】利用CCS6.1生成out文件的同时生成bin文件

    [Linux开发][DSP开发]利用CCS6.1生成out文件的同时生成bin文件 标签:[DSP开发] [Linux开发] 尝试在windows上安装的CCS6.1开发AM4378-Linux下的应 ...

  2. 基于FPGA视频时序生成中的库文件

    上一篇分享了一个视频时序生成代码,下面我根据之前项目中用到的时序,对各个参数做了库文件,方便调用. -- -- Package File Template -- -- Purpose: This pa ...

  3. IOS开发:使用lipo合并armv7,i386,armv7s库文件

    假设多个版本的lib分别是 libxxx.armv7.a , libxxx.armv7s.a, libxxx.i386.a我们的目标是 把他们合并成超级通用版的libxxx.a  打开命令行 Term ...

  4. g++ 生成C++ .so库文件,并调用示例

    Tags: g++ C++ so library   在Linux系统下用g++命令编译C++程序.也可以生成so,a链接库   示例一 编译时链接so库 Test.h 文件内容   Main.cpp ...

  5. VS2008 生成静态链接库并使用

    1.启动VS2008创建一个Win32控制台程序 2.选择静态库 3.创建两个文件lib.h和lib.cpp //lib.h #ifndef LIB_H #define LIB_H int add(i ...

  6. Cocos2d-x 开发 v3.2 建立新项目并添加库文件

    一.添加其它类库     3.0以上的设计耦合性强,项目中模块常以库的形式存在,需常添加链接库.在3.0中经常用到CocoStudio 编辑器的资源数据,所以需要添加CocoStudio 库. 1.1 ...

  7. Makefile 自动搜索 c 和 cpp 文件, 并生成 .a 静态库文件

    最近 又弄linux 下的 .a 静态库编译, 于是想 做个 一劳永逸的Makefile, 经过一番折腾, 最后成功了 只需要 改两个 参数 就可以执行了(MYLIB 和 VPATH), 代码 如下: ...

  8. 【DSP开发】利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程

    [DSP开发]利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:前端是时间基于VS ...

  9. VS2010编译Boost 1.57 静态链接库

    http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ...

随机推荐

  1. Spring Boot常用的注解

    @SpringBootApplication:包含@Configuration.@EnableAutoConfiguration.@ComponentScan通常用在主类上.由于大量项目都会在主要的配 ...

  2. 04_mysql安装

    # 安装 [root@localhost ~]# yum install mysql mysql-server -y 报错 [root@ossec-server ~]# yum install mys ...

  3. [Flutter] Stack Layout

    Normally if you place three the same size icons in a stack, they will stands on top of each other, t ...

  4. Lavevel 中 trait 如何继承与复写

    1 写一个基类 2 基类中 use YourTrait 3 写一个子类 extends 基类 4 子类中覆写 YourTrait 中的同名方法 $query = parent::scopeOfPara ...

  5. Oracle 进程 前台进程-服务进程

    一.什么是服务进程(前台进程) 当用户运行一个应用进程时,系统会为用户运行的应用建立一个用户程序,该进程通过某种方式启动一个服务器进程(前台进程),用于处理连接到该实例的用户进程的请求. 二.服务进程 ...

  6. 041_查找 Linux 系统中的僵尸进程

    #!/bin/bash#awk 判断 ps 命令输出的第 8 列为 Z 是僵尸进程,显示该进程的 PID 和进程命令 ps aux |awk '{if($8 == "Z"){pri ...

  7. Linq to AD

    輕鬆找出域中所有用戶,組,而且還可以更改 LINQ to Active Directory https://linqtoad.codeplex.com/ LINQ to LDAP http://lin ...

  8. java常用函数

    if(null == list || list.size() ==0 ){ } list.isEmpty()和list.size()==0 没有区别 isEmpty()判断有没有元素而size()返回 ...

  9. 牛客练习赛39 B.选点

    链接:https://ac.nowcoder.com/acm/contest/368/B 来源:牛客网 题目描述 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi.现在要选出尽量多的点. 对于 ...

  10. [secureCRT] 关闭secureCRT的auto print功能

    说明:每次不小心按到secureCRT的auto print时,secure总是会自动打印,结果打印出一堆没用的日志.....切换选项页时不小心按到的,还是挺浪费纸的.怎样才能关闭这个功能呢 实现:想 ...