2016-05-02 6 views
9

現在Streamingフレームワークで作業しており、ffmpegを使用してビデオとオーディオをエンコードまたはデコードします。ライブラリーが見つからないためにエラーが発生しました。arc4random

私はhttps://ffmpeg.orgのapiファイルをクリックし、静的リンクバージョンをダウンロードして、実際には.exe(開発中のWindowsを使用していますが、運用中のLinuxを使用する予定です) dllとヘッダー情報。

私はdllの代わりに 'exe'を使うことはできないと思うので、私はgitソースをクローンして自分でコンパイルしようとしました。その後

、コンパイル時に私は、このエラーに遭遇:

CC libavutil/random_seed.o 
libavutil/random_seed.c: In function 'av_get_random_seed': 
libavutil/random_seed.c:130:12: error: implicit declaration of function 'arc4random' [-Werror=implicit-function-declaration] 
    return arc4random(); 
      ^
cc1: some warnings being treated as errors 
common.mak:60: recipe for target 'libavutil/random_seed.o' failed 
make: *** [libavutil/random_seed.o] Error 1 

は、私の知る限り、これは私が図書館のarc4randomを欠けていることを意味し、私は、このlibに探し始めた、とabsolutlyました何も、このライブラリは何とかアップルの関連性があるという事実の他に...しかし、それをコンパイルするためのDLLやものやソースはありません。

私はcygwinとそのGCCを使って64ビットWindows 7マシンでコンパイルします。

私はこの欠落しているライブラリ、または私のプロジェクトにライブラリとしてffmpegを取得するいくつかの他の可能性を得ることができるいくつかの場所に誰かをヒントできますか? (私は静的にリンクできる何かが好きです。このプロジェクトは単独でlibになるためです)

私はそのヘッダを借りることができるので、ffmpegのダウンロードしたexeを使う方法がありますか?私はGitからクローンしたソースですか?

何かヒントありがとうございます。

よろしく、

Jannikアダム

+0

あなたは 'cygwin-devel'パッケージをインストールしましたか? – matzeri

+0

@matzeriはい、バージョン2.5.1-1 – Omega1001

+0

私も同じエラーがあります。私が見つけた有益な情報はarc4random.cのパッチだけでしたが、コンパイルする前にパッチを適用する必要があるかどうかはわかりません。 –

答えて

7

これは#ifが誤ってシステムがこの機能を持っていることを報告しているため、発生しているように見えます。私はいくつかのファイルを編集することでそれを回避することができました。

オープンlibavutil/random_seed.c#if HAVE_ARC4RANDOMを探して、ライン129の周りにも、3つのラインのブロック削除する必要があります。あなたは、おそらくのためにtime.cに別の同様の失敗を取得します再びmakeを実行すると

129 #if HAVE_ARC4RANDOM 
130  return arc4random(); 
131 #endif 

変更する前に:

ライン41の周りになると、このように、そこに最初のブロックを削除する必要がありますにgettimeofday()、そう libavutil/time.cをオープンし、 #if HAVE_GETTIMEOFDAY探しコンパイルが多く、さらに得たが、ffserver.cに失敗したこれら二つの変更後

41 #if HAVE_GETSYSTEMTIMEASFILETIME 

:変更した後

ffserver.c: In function ‘main’: 
ffserver.c:4000:5: error: implicit declaration of function ‘sigaction’ [-Werror=implicit-function-declaration] 
    sigaction(SIGCHLD, &sigact, 0); 

私は設定を開いて、このエラーを修正するには。MAKと、このように、CFLAGSの最後に-D_XOPEN_SOURCE=700を追加しました:

42 CFLAGS= -std=c99 -fomit-frame-pointer -pthread -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -O3 -fno-math-errno -fno-signed-zeros -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wno-maybe-uninitialized -D_XOPEN_SOURCE=700 

This post-D_XOPEN_SOURCE=700が助け理由について少し説明しています。

さらに、私はmakeをやり直し、ついに成功しました。 make installを実行した後、すべてのバイナリがインストールされ、正常に使用できました!

+0

私にとって解決策はtime.cファイルの変更無しで動作しました – porsh

+0

はHAVE_ARC4RANDOMのエラーをここで検出するように設定しています。 – rogerdpack

関連する問題