4

Linux で GCC 5.3 を使用して libedit をコンパイルしようとしていますが、不可解なエラー メッセージが表示されます。

/home/mybin/libgcc/x86_64-unknown-linux-gnu/5.3.0/../../../libcurses.a(lib_termcap.o): relocation R_X86_64_32 against `_nc_globals' can not be used when making a shared object; recompile with -fPIC
/home/mybin/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../libcurses.a: could not read symbols: Bad value

recompile with -fPICncurses または libedit は何を参照しますか? そして、どのように-fPICフラグを渡しますか。CFLAGS=-fPICの構成に追加しようとしましたncurses & libeditが、まだ機能しませんでした。

-fPIC とは何かについての SO に関する投稿を多数見つけましたが、フラグの設定方法に関する投稿は見つかりませんでした。

ありがとうアート

4

3 に答える 3

1

エラー メッセージの間違った部分を見ています。「再配置 R_X86_64_32」は、64 ビット ライブラリに対して 32 ビット コードをビルドしようとしている、またはその逆を試みていることを意味します。両方に同じアーキテクチャを選択したことを確認してください。

于 2016-04-16T17:30:06.850 に答える
0

-fPIC は、位置に依存しないコードを生成するために使用され、共有ライブラリを作成するために使用されます。Make ファイルに問題があります。修正するに
は、Makefile の 98 行目を編集します。

.c.o:
        ${CC} ${CFLAGS} -c $<

CC の後に、次のように CC の後に -fpic を追加します。

.c.o:
        ${CC} -fpic ${CFLAGS} -c $<

103行目でも:

libedit.so: ${OOBJS}
        ${CC} --shared -o $@ ${OOBJS}

--shared の後に -fpic を追加:

libedit.so: ${OOBJS}
        ${CC} --shared -fpic -o $@ ${OOBJS}

-fPIC と -fpic の違いについて知りたい場合は、どちらも同じことを行いますが、-fpic の方が効率的であることに注意してください。詳細については、こちらを確認してください`-fpic` と `-fPIC` gcc パラメータの違いは何ですか? .

于 2016-04-16T17:46:37.013 に答える