我在文档中找到了一些关于openssl的示例代码。( C++部分下的https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption)
他们建议用
g++ -Wall -std=c++11 aes_binary.cxx -o aes_binary.exe -lcrypto
我将其改编为bazel:
cc_binary(
name = "aes_binary",
srcs = ["aes_binary.cpp"],
deps = ["//base"],
linkopts = [
"-lcrypto"
]
)
它工作得很好,但我想把它转换成一个库。代码基本上包含一个模板类和3个函数(加密、解密、genparams)。我将二进制文件分离为aes.h和aes.cpp,并希望在其他模块和二进制文件中使用该库。
c_library(
name = "aes",
hdrs = ["aes.h"],
srcs = ["aes.cpp"],
)
并将其导入到另一个具有以下内容的二进制文件中:
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”。
发布于 2021-05-20 20:49:44
aes
目标的每个用户都需要链接到crypto
库,因此您应该在此处添加linktopt
:
cc_library(
name = "aes",
hdrs = ["aes.h"],
srcs = ["aes.cpp"],
linkopts = ["-lcrypto"]
)
顺便说一句,尽可能多地使用Bazel编译会更好,因为它使您的构建具有可重复性和封闭性:您不再依赖系统范围的OpenSSL。
例如,如果你使用Bazel,boringssl就是OpenSSL的很好的替代品:
# 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"]
)
https://stackoverflow.com/questions/67619954
复制相似问题