首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将cc_binary转换为cc_library?

如何将cc_binary转换为cc_library?
EN

Stack Overflow用户
提问于 2021-05-20 20:02:09
回答 1查看 112关注 0票数 0

我在文档中找到了一些关于openssl的示例代码。( C++部分下的https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)

他们建议用

代码语言:javascript
运行
复制
g++ -Wall -std=c++11 aes_binary.cxx -o aes_binary.exe -lcrypto

我将其改编为bazel:

代码语言:javascript
运行
复制
cc_binary(
    name = "aes_binary",
    srcs = ["aes_binary.cpp"],
    deps = ["//base"],
    linkopts = [
        "-lcrypto"
    ]
)

它工作得很好,但我想把它转换成一个库。代码基本上包含一个模板类和3个函数(加密、解密、genparams)。我将二进制文件分离为aes.h和aes.cpp,并希望在其他模块和二进制文件中使用该库。

代码语言:javascript
运行
复制
c_library(
    name = "aes",
    hdrs = ["aes.h"],
    srcs = ["aes.cpp"],
)

并将其导入到另一个具有以下内容的二进制文件中:

代码语言:javascript
运行
复制
cc_binary(
    name = "vulndb_miner",
    srcs = ["vulndb_miner.cpp"],
    deps = ["//codelearn/vulndb:aes",
            ],
    linkopts = [
        "-lcrypto",
    ]
)

但是,如果没有在此范围中声明“OPENSSL_cleanse”,则无法对其进行编译。“EVP_add_cipher”未在此范围中声明

我做错了什么?

PS:我在vulndb_miner.cpp中包含了这个库,因为#include“codelearn/ese.h”。

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 20:49:44

aes目标的每个用户都需要链接到crypto库,因此您应该在此处添加linktopt

代码语言:javascript
运行
复制
cc_library(
    name = "aes",
    hdrs = ["aes.h"],
    srcs = ["aes.cpp"],
    linkopts = ["-lcrypto"]
)

顺便说一句,尽可能多地使用Bazel编译会更好,因为它使您的构建具有可重复性和封闭性:您不再依赖系统范围的OpenSSL。

例如,如果你使用Bazel,boringssl就是OpenSSL的很好的替代品:

代码语言:javascript
运行
复制
# WORKSPACE file
http_archive(
    name = "boringssl",
    strip_prefix = "boringssl-16100fd5073b3986ca03efa6bbb501c2e061e7e3"
    urls = ["https://github.com/google/boringssl/archive/16100fd5073b3986ca03efa6bbb501c2e061e7e3.zip"],
)

# BUILD file
cc_library(
    name = "aes",
    hdrs = ["aes.h"],
    srcs = ["aes.cpp"],
    deps= ["@boringssl//:ssl"]
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67619954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档