Компилировать статическую разделяемую библиотеку с GCC

Я хочу создать разделяемую библиотеку (.so), которая будет статически связана, поэтому она не будет зависеть от других библиотек и сможет работать с любой версией linux.

Мой пример.ч

#ifndef example_h__
#define example_h__

#include <stdint.h>

extern void example_1(void);

#endif  // example_h__

Мой пример.c:

#include <stdio.h>

void example_1(void) {
    puts("Hello, I'm a shared library");
}

Мой Makefile:

all :
    gcc -c -Wall -Werror -fpic example.c
    gcc -shared -Wl,-Bstatic -static-libstdc++ -static-libgcc -L/opt/musl/lib -I/opt/musl/include -o libexample.so example.o
    readelf -d libexample.so

Я уже скомпилировал musl lib из исходного кода с параметром -fPIC и все еще получаю эту ошибку:

# make
gcc -c -Wall -Werror -fpic example.c
gcc -shared -Wl,-Bstatic -static-libstdc++ -static-libgcc -L/opt/musl/lib -I/opt/musl/include -o libexample.so example.o
/usr/lib/gcc/x86_64-alpine-linux-musl/6.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: /opt/musl/lib/libc.a(__stdout_write.lo): relocation R_X86_64_PC32 against protected symbol `__stdio_write' can not be used when making a shared object
/usr/lib/gcc/x86_64-alpine-linux-musl/6.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

Как это решить?

0 ответов

Другие вопросы по тегам