2017-07-17 5 views
0

Webrtc Streaming Serverを使用するためにLibSourceyを実行しようとしています。Libsourceyが見つからない-fPICコンパイルエラー

私はそれを動作させるように見えないということです。 私は自分のUbuntu 16.04(cmakeファイルのRegexp)でプロジェクトをcmakeするのに苦労しましたが、現在は修正されています。 私が実際に得た問題はコンパイル時に共有オブジェクトのバグです:私は今、何をすべきか分からないようすべてのヘルプは非常に高く評価されるだろう

usr/bin/ld: /home/kimmie/ffmpeg_build/lib/libswresample.a(options.o): 
relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; 
recompile with -fPIC 

/home/kimmie/ffmpeg_build/lib/libswresample.a: error adding symbols: Bad value 
collect2: error: ld returned 1 exit status 

av/CMakeFiles/av.dir/build.make:783: recipe for target 'av/libscy_av.so.1.0.2' failed 

答えて

2

Ubuntu 16.04でこの同じエラーが発生しました。

私は共有ライブラリを構築するためにFFmpegをフラグで再コンパイルしました。 FFmpeg Compilation Guideにコード例ボックス以下、Iは、該当は./configureラインに次の二つのフラグを追加しました:

  • --enable-PIC

  • --enable共有

--disable-sharedフラグも削除しました。

すべてのコンポーネントに--enable-pic--enable-sharedを追加し、そのコンポーネントで認識できないというメッセージが返された場合はフラグを削除しました。少なくともlibx264、libfdk-acc、およびlibmp3lameが必要です。--enable-shared。そして、最終的にFFmpeg(コピーして、上記にリンクされているFFmpegのガイドから貼り付け)のために:

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ 
--prefix="$HOME/ffmpeg_build" \ 
--pkg-config-flags="--static" \ 
--extra-cflags="-I$HOME/ffmpeg_build/include" \ 
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \ 
--bindir="$HOME/bin" \ 
--enable-gpl \ 
--enable-libass \ 
--enable-libfdk-aac \ 
--enable-libfreetype \ 
--enable-libmp3lame \ 
--enable-libopus \ 
--enable-libtheora \ 
--enable-libvorbis \ 
--enable-libvpx \ 
--enable-libx264 \ 
--enable-libx265 \ 
--enable-nonfree \ 
--enable-pic \ 
--enable-shared 

注意私の例では最後の2行はFFmpegの ガイドとは異なります。

すべてを実行したら、おそらくLibsourceyソースとビルドフォルダを削除してからやり直してください。

最終的にFFmpegとWebRTCの依存関係を持つLibsourceyをコンパイルして正常にビルドするには、約4〜5日かかりました。他にもいくつかの問題がありますので、他の質問がある場合は、私にタグを付けるようにしてください。注:私はLinuxの構築には戸惑いであり、すべての概念について確固たるものではありません。これは私のために働いたもので、おそらくそれはあなたのために働くでしょう。

0

リンクエラーがありますが、コンパイルエラーではありません。あなたはバグに遭遇していません。 あなたは今働けないリンケージを試みました。

共有ライブラリlibscy_av.soを作成しようとしています。すべてのオブジェクト 共有ライブラリにリンクされているファイルは、Position Independent Codeで構成されていなければなりません。このようなgccを持つオブジェクトファイル を生成するには、オプション-fPICでコンパイルします。

共有ライブラリでは、スタティックライブラリlibswresample.aのメンバーであるオブジェクトファイル options.oが必要であることがリンカによって検出されます。それから はoptions.oがPICではないことを発見したので、 共有ライブラリにリンクすることはできません。リンケージが失敗し、 options.o-fPICコンパイラオプションで再コンパイルする必要があることをリンカが通知します。

このアドバイスに従うには、ソースからスタティックライブラリlibswresample.aを再構築し、コンパイラフラグに-fPICを追加する必要があります。

これは可能ですが、静的ライブラリのオブジェクトファイルが になるのは珍しいことですが、より簡単なオプションがあります。あなたの間違いは、 共有バージョン(libswresample.so)ではなく、(libswresample.a)の静的バージョンである にリンクしていました。これはPICになります。その誤りを訂正するだけです。あなたのパッケージマネージャーから提供されたdevパッケージから libswresample.aをインストールする場合、 もlibswresample.soを提供します。ソースからlibswresample をビルドした場合、ビルドシステムは両方をビルドします。

関連する問題