* Hi:* *I static compile opensslv1.1.1 on Ubuntu18.04 as follow :* $./config no-shared *and then:* $make $make install *after that, I write a test.c like this:*
#include <stdio.h> #include <string.h> #include <time.h> #include <openssl/err.h> #include <openssl/bn.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/crypto.h> #include <ctype.h> #include <stdlib.h> #include <unistd.h> int generate_key(int bits, int count) { int ret = 0; RSA *r = NULL; BIGNUM *bne = NULL; unsigned long e = RSA_F4; fprintf(stdout, "id;n;e;p;q;d;t\n"); for (int i = 0; i < count; i++) { bne = BN_new(); ret = BN_set_word(bne,e); r = RSA_new(); ret = RSA_generate_key_ex(r, bits, bne, NULL); } return (ret == 1); } // added main function int main (){ printf("Hello\n"); return 0; } *and static compile it as follow:* $gcc -static -o test test.c -lssl -lcrypto -ldl -pthread x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': dso_dlfcn.c:(.text+0x11): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking libcrypto.a(b_addr.o): In function `BIO_lookup_ex': b_addr.c:(.text+0xcea): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking x86_64-linux-gnu/libcrypto.a(b_sock.o): In function `BIO_gethostbyname': b_sock.c:(.text+0x71): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking *when i exec the test:* $./test [1] 36025 segmentation fault (core dumped) ./test *Use gdb for debug:* gdb-peda$ bt #0 0x0000000000000000 in ?? () #1 0x00000000005a14e5 in __register_frame_info_bases.part.6 () #2 0x000000000040168d in frame_dummy () #3 0x0000000000000001 in ?? () #4 0x00000000005a275c in __libc_csu_init () #5 0x00000000005a1f27 in __libc_start_main () #6 0x00000000004015aa in _start () *So, how did i use openssl for static link?*