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;
}
#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
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 ()
#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?