熟悉C++开发的的小伙伴都知道,我们一般代码中往往要引入许多第三方编译好的库,有些是静态链接库static library, 有些是动态链接库dll。引入库的目的一是减少代码的编译时间,二是只提供函数/方法接口,可以有效的保护源码不被泄露。下面将在DSP C6657上编译静态库.lib


工具

  • DSP C6657 EVM官方评估板
  • CCS8.1
  • win10 PC

编译静态库

思考

Visual Studio 2017上编译静态库static library的过程:

  1. 新建一个.h头文件(写函数的声明)
  2. 新建一个.cpp文件(写函数的具体实现)
  3. 在vs2017中的工程属性中,将编译输出改为static library
  4. 生成解决方法,编译出.lib库文件
  5. 测试,新建一个vs工程,将.h和.lib加入工程目录,在cpp中包含.h文件,直接调用函数。

DSP上编译静态库和Visual Studio上的区别 相同之处:都要编写.h,cpp文件,工程输出设置为static library。不同之处:采用不同的complier编译cpp,vs2017采用Microsoft C++编译器编译cpp,  DSP上采用gmake编译cpp。

DSP上编译静态库

step1:新建一个CCS Project

注意:

配置项 配置 含义
Family C600 TMS320C6657 DSP的型号
Complier version TI v8.2.4(根据CSS) 编译器版本,CCS可以设置多个版本的编译器
Output type Static Library(重要) 编译输出文件的格式,编译静态库选择Static Library
Device endianness little 内存的大小端

工程名称:DSP6657_CompleLib

 

step2:编写库文件的代码

我们先实现一个简单函数接口(返回2个整数之和): int add_test(int a,int b)

.h文件--------函数的声明

/*
* add_test.h
*
* Created on: 2018年8月22日
* Author: weiPenghui
*/ /*
* 测试编译静态库.lib文件
* 方法:
* step1:新建CCS工程时,将ToolChain设置为 static Library
* step2:编写.h,c文件
* step3:build生成.lib文件
*
* 总结:和windows上C/C++ lib编译的方法相似
*参考:https://blog.csdn.net/sphinz1/article/details/78817234
*/ #ifndef ADD_TEST_H_
#define ADD_TEST_H_ extern int add_test(int a,int b); #endif /* ADD_TEST_H_ */

.c文件----函数的具体实现

/*
* add_test.c
*
* Created on: 2018年8月22日
* Author: weiPenghui
*/ #include"add_test.h" int add_test(int a,int b){ return a+b; }

step3:编译生成lib

Project->Build Project  在工程目录生成lib静态库:

 

至此,成功生成了.lib文件,很激动有木有!


测试运行

新建一个工程,取名:DSP6657_TestComplieLib。将上一步的.lib以及.h文件复制到测试工程的根目录。

 

/**
* main.c
*/
#include<stdio.h>
#include<stdlib.h>
#include"add_test.h" /*
* 测试调用编译好的静态库.lib
* 方法:将静态库文件.lib,头文件.h加入工程
*/ int main(void)
{ int num1 = 10;
int num2 = 12; int res = add_test(num1,num2); printf("num1=%d,num2=%d,res=%d\n",num1,num2,res); return 0;
}

Run起来... 运行结果:

作者:侠之大者_7d3f 链接:https://www.jianshu.com/p/30257579e092 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

【转】TI DSP C6657学习之——编译静态库.lib的更多相关文章

  1. VS编译静态库 .lib 其中Release 版本比Debug版本要大好多原因

    如果工程代码使用了: 把此选项关闭即可减少库大小不少:

  2. ndk学习8: 编译动态库

    目录: 手工编译动态库 ndk-build编译动态库(Eclipse环境)   手工编译静态库 老规矩还是先手工操作,知其然并知其所以然   需要用到的核心命令: gcc -g -c -fpic -W ...

  3. ndk学习7: 使用静态库

    目录: 手工编译静态库 ndk-build编译静态库   手工编译静态库 老规矩还是先手工操作,知其然并知其所以然   需要用到的核心命令: gcc –g –c mod1.c mod2.c mod3. ...

  4. 【iOS】编译静态库

    与java和.net一样,objc也由类库的概念,不过在在objc上一般叫库,库表示程序代码集合,可以共享给其他程序使用,库是编译后的二进制文件,因此不能看到源代码,多用于一些开放sdk(如百度地图s ...

  5. 关于使用Visual编译静态库动态库及其使用的问题

    本文主要讲述了如何使用Visual Studio 2013 编译静态库和动态库,并使用. 一.静态库 1.  编写静态库 若要创建将引用并使用刚创建的静态库的应用程序,请从“文件”菜单中选择“新建”, ...

  6. android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)

    android ndk-build 编译静态库libxx.a 需求场景: 目前有安卓编码好的现在的openssl的两个.a,我们需要调用openssl的函数,并把功能再封装成.a; 这样使用时,在an ...

  7. linux+vs2013编译静态库和动态库

    Linux下创建与使用静态库 Linux静态库命名规则 Linux静态库命名规范,必须是"lib[your_library_name].a":lib为前缀,中间是静态库名,扩展名为 ...

  8. cmake opencv,dlib 编译静态库 1

    无论windows,linux 所有的库 ,dlib,opencv 通过cmake-gui 设置好静态库, 动态库,和其他各个选项 Tips: cmake 优先级用cmake-gui,因为命令太多,容 ...

  9. Makefile 编译静态库文件及链接静态库

    本文为原创文章,转载需指明该文链接 1.代码目录结构如下: comm/ comm/inc/apue.h  3 atexit.c Makefile  5 staticlib/lib/ staticlib ...

随机推荐

  1. 【转】Jupyter Notebook主题字体设置及自动代码补全

    Jupyter Notebook用久了就离不开了,然而自带的主题真的不忍直视.为了视力着想,为了自己看起来舒服,于是折腾了一番..在github上发现了一个jupyter-themes工具,可以通过p ...

  2. (转)python3:类方法,静态方法和实例方法以及应用场景

    原文:https://blog.csdn.net/qq_34979346/article/details/83212716 1.实例方法在编程里经常用的是实例方法,直接用实例去调用, 只要 方法里有s ...

  3. 泡泡一分钟:BLVD: Building A Large-scale 5D Semantics Benchmark for Autonomous Driving

    BLVD: Building A Large-scale 5D Semantics Benchmark for Autonomous Driving BLVD:构建自主驾驶的大规模5D语义基准 Jia ...

  4. [LeetCode] 122. Best Time to Buy and Sell Stock II 买卖股票的最佳时间 II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  5. [LeetCode] 340. Longest Substring with At Most K Distinct Characters 最多有K个不同字符的最长子串

    Given a string, find the length of the longest substring T that contains at most k distinct characte ...

  6. consul集群搭建以及ACL配置

    由于时间匆忙,要是有什么地方没有写对的,请大佬指正,谢谢.文章有点水,大佬勿喷这篇博客不回去深度的讲解consul中的一些知识,主要分享的我在使用的时候的一些操作和遇见的问题以及解决办法.当然有些东西 ...

  7. Java线程 : 线程同步与锁

    一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. public ...

  8. QT笔记-QlineEdit

    1 QlineEdit 2 案例 构造一个用户登录界面,输入用户名密码,点击确定以后检查是否正确 (1)布局 注意事项:先拖动Label--->然后Line Edit---->按住ctrl ...

  9. IP通信学习心得01

    一.物理拓扑 1. 1) 总线拓扑 特点:所有设备都处于同一个冲突域与广播域,共享相同的带宽 一次只能有一个设备传输,且两端要安装端接器. 传输介质:同轴电缆.(注:10Base5:容量10M 传输5 ...

  10. python列表生成式、键盘输入及类型转换、字符串翻转、字母大小写、数组广播、循环语句等基础问题

    Python知识总结 1.列表生成式 ​ 在实际开发过程中,当需要获取一个连续列表时,可直接使用range(3,10),但是如果获取该列表中每个数据的平方时,通常可以通过for循环来解决这个问题,如下 ...