使用GCC编译静态共享库

时间:2017-03-05 15:59:26

标签: c gcc shared-libraries linux-development

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

我的 example.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");
}

我的 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

我已经使用-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

如何解决?

0 个答案:

没有答案