bazel 链接_bazel-链接第三方动态库,静态库。

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 21:00   2514   0

demo4示例 链接第三方动态库,静态库。

使用cc_import链接外部库。原理是通过cc_import规则导入第三方库,然后cc_binary再依赖cc_import规则的target,也即依赖第三方库。

demo4目录树

├── link

│ ├── BUILD

│ ├── include

│ │ ├── func.h

│ │ └── static.h

│ ├── lib

│ │ ├── libfunc.so  由shared_lib生成

│ │ └── libstatic.a  由static_lib生成

│ └── main.c

├── README.md

├── shared_lib

│ ├── BUILD 动态库的目标名必须写成libfoo.so的形式

│ ├── func.c

│ └── func.h

├── static_lib

│ ├── BUILD 静态库的目标名可以省略lib*.a

│ ├── static.c

│ └── static.h

└── WORKSPACE

先分别将shared_lib和static_lib生成对应的动态库和静态库,然后在link包中链接这两个库,最后有main.c调用库中的API。

static_lib BUILD

cc_library(

name = "static",

srcs = ["static.c"],

hdrs = ["static.h"],

linkstatic = True,

)

shared_lib BUILD

cc_binary(

name = "libfunc.so",

#name = "func",#必须写成libfunc.so,否则编译不过

srcs = ["func.h","func.c"],

linkshared = True,

)

link BUILD

cc_import(

name = "func",

hdrs = ["include/func.h"],

shared_library = "lib/libfunc.so",

)

cc_import(

name = "static",

hdrs = ["include/static.h"],

static_library = "lib/libstatic.a",

)

cc_binary(

name = "link_static_shared",

srcs = ["main.c"],

deps = [":func",":static"],

copts = ["-Ilink/include"],

)

参考:

CMake 添加头文件目录,链接动态、静态库(添加子文件夹)

CMake支持大写.小写.混合大小写的命令. 当编译一个需要第三方库的项目时,需要知道: 去哪找头文件(.h),-I(GCC) INCLUDE_DIRECTORIES() 去哪找库文件(.so/.dl ...

Linux 下动态库 / 静态库(依赖)

一. 依赖动态库的动态库 libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而mai ...

C++基础知识之动态库静态库

一. 静态库与动态库 库(library),一般是一种可执行的二进制格式,被操作系统载入内存执行. 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库 静态库和动态库区别: ...

linux 动态库 静态库 函数覆盖

本文讨论了linux动态库 静态库中函数的覆盖问题. 测试目的: 同名函数,分别打成动态库libdync_lib.so与静态库libstatic_lib.a,并把libstatic_lib.a打到另 ...

Linux 动态库 静态库

什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和Linux的本质不同,因此二者库的二进制是不兼容的.Linux操作系统支持的库函数分为静态库和动态库 ...

C_动态库|静态库

动态库 动态链接库简称DLL,同时以.dll 为后缀,主要用于提供代码和数据 dll 并不是所有数据都能被访问到,必须要进行导出 动态链接库在内存中始终只保存了一份数据,起到了节约内存的作用 生成动态 ...

gcc链接g++编译生成的静态库和动态库的makefile示例

使用c++开发程序或者库时,将库提供给其他人使用. 然而使用者是使用c开发的程序,链接g++编译生成的库时,于链接gcc生成的库,有所不同. 首先是静态库,以链接g++编译生成的libmylib.a为 ...

cmake 添加头文件目录,链接动态、静态库(转载)

来源网址:http://www.cnblogs.com/binbinjx/p/5626916.html 罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目 ...

golang 编译或链接 c语言动态、静态库的方法, golang 与 c语言 相互调用

1.golang链接c静态库的方法可以见这个示例: https://github.com/atercattus/go-static-link-example https://github.com/sh ...

cmake 添加头文件目录,链接动态、静态库

罗列一下cmake常用的命令. CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_directories([AFTER| ...

随机推荐

Android与H5交互

1.初始化WebView控件 webView = (WebView) findViewById(R.id.webview); 2.设置WebView属性 WebSettings webSettings ...

Oracle性能优化之SQL语句

1.SQL语句执行过程 1.1 SQL语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. ...

Android(java)学习笔记158:Java程序入口和Android的APK入口

1.Java程序的入口:static main()方法 public class welcome extends Activity { @Override public void onCreate(B ...

BFS-hdu-4101-Ali and Baba

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4101 题目大意: 给一个矩阵,0表示空的可走,-1宝藏的位置(只有一个),其余的正整数表示该位置石头 ...

关于自定义Adapter实现ListView的使用

以下为使用BaseAdapter作扩展,自定义Adapter来使用ListView控件: 需要注意以下的几点: 1.自定义Adapter时,需要特别注意Adapter类中getView()方法覆盖,注 ...

【blog】批量删除时,guava Splitter与Java String的split 方法有什么区别

参考链接 http://www.cnblogs.com/hxfirefox/p/4832913.html

解决jdk1.7,1.8共存问题小思

一 起因 随着jdk1.9呼之欲出之势,准备花点时间把jdk1.8搞掉,于是准备下一个项目的依赖改为jdk1.8,先去下载安装,安装好之后电脑上就存在两个版本的jdk.然后将两个版本的jdk路径都配置 ...

一个demo 理解 vuex

相比接触vue的同学们已经看了官方文档了.这里我用一个简单的demo来阐述下vuex的知识点,虽然简单,但是容易理解.也加深自己的记忆. 用脚手架建立个项目vue init webpakc-simpl ...

Spark1.0.0 学习路线指导

转自:http://www.aboutyun.com/thread-8421-1-1.html 问题导读1.什么是spark?2.spark编程模型是什么?3.spark运维需要具有什么知识?4.sp ...

js中var a={}什么意思

创建一个变量a, 并给a赋值:{}是一个空的对象,是 new Object();的简写.

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP