c++ - 使用 openssl 构建静态二进制文件的正确方法是什么?

标签 c++ c gcc g++

我有以下生成文件:

CC=g++
CFLAGS=-c -Wall
REST_LIBS = -lssl -lcrypto -lboost_system -lcpprest

all: main

main: static_pack
    g++ -std=c++14 -D DEBUG -Wfatal-errors -static -pthread -I$(basepath)/vendors/cpp-jwt/include -I$(basepath)/vendors/json/include \
    -DTS=\"/ctts.json\" \
    -DCS_PATH=\"/bin\" \
    -DCTFS_ENC=\"/ctfs.enc\" \
    -DUNTAR_PATH=\"/\" \
    -DCLUSTER_PATH=\"/.clusters\" \
     -o run main.cpp \
    libmain.a && \
    rm -rf debpkg/cs/usr/bin/cs debpkg/cs.deb && \
    cp run debpkg/cs/usr/bin/cs && \
    dpkg-deb -b debpkg/cs && \
    mv debpkg/cs.deb .

static_pack: rest.o aes.o random.o
    ar rcs libmain.a random.o aes/aes.o rest/rest.o

rest.o:
    g++ -std=c++14 -Wfatal-errors -c $(REST_LIBS) -o rest/rest.o rest/rest.cpp 


aes.o: random.o
    g++ -std=c++14 -D DEBUG -Wfatal-errors -c -lcrypto -o aes/aes.o random.o aes/aes.cpp

random.o:
    g++ -std=c++14 -Wfatal-errors -c -o random.o random.cpp

如果我将其编译为动态链接,我没有问题。但是,当我尝试静态编译时,出现大量错误,例如:

aes.cpp:(.text+0x706): undefined reference to `EVP_DecryptInit_ex'
aes.cpp:(.text+0x732): undefined reference to `EVP_DecryptUpdate'
aes.cpp:(.text+0x763): undefined reference to `EVP_CIPHER_CTX_ctrl'
aes.cpp:(.text+0x792): undefined reference to `EVP_DecryptFinal_ex'
aes.cpp:(.text+0x7a1): undefined reference to `EVP_CIPHER_CTX_free'

基本上没有找到任何符号。我不确定我现在需要做什么。我试过将我的目标文件构建为静态的,但是失败了。我查看了链接顺序,但这似乎是正确的。

我的问题归结为两件事:

  1. 当静态链接其他对象时,这些对象是否也需要静态编译+归档?

  2. 我的设置有什么问题?

最佳答案

您的 rest.o 规则不需要 REST_LIBS,因为它只编译一个源文件。您需要在 main 规则中将这些库传递给 g++ - 作为其中的一部分,g++ 将调用链接器。

关于c++ - 使用 openssl 构建静态二进制文件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50661275/

相关文章:

c++ - 就地修改并返回拷贝是否有意义?

c - 与输入/输出格式说明符相关联的每个转换都是 C 中的序列点吗?

gcc - 如何在 Beaglebone Black 上编译 openssl 1.0.2f?

node.js make 失败,找不到 ld

c++ - 如何在C++中进行无限循环? ( Windows )

c++ - 如何影响 new 分配的内存并转换为数组 od 类对象?

c++ - `gprof` 特定代码行花费的时间

c++ - 如何在 Linux 上挂接 send()/recv() 函数?

c++ - 尝试使用 libjpeg 将 YUV 图像压缩为 jpeg 时出现奇怪的图像

c++ - 如何覆盖静态二进制文件的 C++ 启动函数?