2017-05-17 4 views
1

を発生し、私は次のように共有ライブラリを作った:私は共有ライブラリを作るときに、エラーが

  1. gcc -c output.c
  2. gcc -shared -fPIC -o liboutput.so output.o

をoutput.cがフォローされたとき、それは仕事ができます。

//#include "output.h" 
#include <stdio.h> 

int output(const char* st) { 
    return 1+2; 
} 

ただし、output.cを次のように変更すると、エラーが発生します。

//#include "output.h" 
#include <stdio.h> 

int output(const char* st) { 
    printf("%s\n", st); 
    return 1+2; 
} 

これはエラーメッセージです:

/usr/bin/ld: output.o: relocation R_X86_64_PC32 against undefined 符号 `[email protected]@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: 最后的链结失败: 错误的值 collect2: error: ld returned 1 exit status

は私がなぜ、どのようにそれを対処するために知ってほしいです。前もって感謝します。

答えて

2

位置独立コードとしてoutput.cをコンパイルする必要があります。あなたが任意のライブラリ関数を呼び出していない最初のバージョンで

gcc -c -fPIC output.c

。しかし、第2のものではprintfが呼び出されています。後で共用ライブラリーを作成する場合は、通常、すべてのソースを-fPICでコンパイルします。

+0

うまくいく可能性があります。誠実にあなたの答えをありがとう。 –

関連する問題