静的ライブラリから共有オブジェクトを生成するのに問題があります。他にも選択肢があることはわかっていますが、これが機能しない理由と機能させる方法に悩まされています(行き詰まっているのではなく)。
以下は私が使用している非常に単純なソースコードです。
get_zero.c
#include "get_zero.h"
int
get_zero(void)
{
return 0;
}
get_zero.h
int get_zero(void);
main.c
#include <stdio.h>
#include <string.h>
#include "get_zero.h"
int
main(void)
{
return get_zero();
}
目標は、libget_zero_staticとlibget_zero_sharedを使用して機能的に等しい2つのアプリケーションを作成することです。
これが私のコンパイル/リンクのステップです:
gcc -c -fPIC get_zero.c
ar cr libget_zero_static.a get_zero.o
gcc -shared -o libget_zero_shared.so -L. -Wl,--whole-archive -lget_zero_static -Wl,-no--whole-archive
そして、これは私が得るエラーです:
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.a(init-first.o): relocation R_X86_64_32 against `_dl_starting_up' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.a(init-first.o): could not read symbols: Bad value
collect2: ld returned 1 exit status
これは64ビットのUbuntuシステム上にあります。
ここでアーカイブ全体のオプションについて読みましたが、この質問ですべての障害が取り除かれたはずです。 静的ライブラリから共有オブジェクトファイルを作成する方法。