bazel-鏈接第三方動態庫,靜態庫。


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"],
)

參考:

https://docs.bazel.build/versions/master/be/c-cpp.html#cc_import


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM