0

我想创建静态链接的共享库(.so),因此它不会依赖于其他库并且可以在任何版本的 linux 上工作。

我的例子.h

#ifndef example_h__
#define example_h__

#include <stdint.h>

extern void example_1(void);

#endif  // example_h__

我的example.c

#include <stdio.h>

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

我的生成文件

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

我已经使用 -fPIC 选项从源代码编译了 musl lib,但仍然出现此错误:

# 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

如何解决?

4

0 回答 0