2016-05-02 10 views
9

Attualmente sto lavorando su un framework Streaming e ho deciso di utilizzare ffmpeg per codificare e decodificare i miei video e/o audio.Errore di compilazione causato dalla libreria mancante arc4random

Quindi ho fatto clic su https://ffmpeg.org per i file API e scaricato la versione collegata staticamente solo per scoprire che conteneva in realtà un file .exe (utilizzo Windows in fase di sviluppo, ma pianifico sull'utilizzo di Linux in produzione) anziché uno o più informazioni su dll e header

Poiché non penso di poter usare "exe" come sostituto di una DLL, ho clonato la sorgente git e ho cercato di compilarlo da solo.

Poi, durante la compilazione mi imbatto in questo errore:

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 

Per quanto posso dire, questo significa che mi manca l'arc4random biblioteca, così ho iniziato la ricerca di questo lib, e ho trovato assolutamente niente, a parte il fatto che questa libreria è in qualche modo legata alla Apple ..., ma nessuna dll e roba o fonti per compilarla da sola.

Io uso Cygwin e il suo GCC per compilare su Windows 7 a 64 bit.

Qualcuno può suggerire in qualche luogo dove posso ottenere questa libreria mancante, o qualche altra possibilità di ottenere ffmpeg come libreria nel mio progetto? (preferirei qualcosa che collegassi staticamente, poiché questo progetto è pensato per essere una lib di per sé)

Forse c'è un modo per utilizzare quel file scaricato di ffmpeg, dal momento che posso prendere in prestito le sue intestazioni da la fonte che ho clonato da Git?

Qualsiasi suggerimento apprezzato.

migliori saluti,

Jannik Adam

+0

hai installato il pacchetto 'cygwin-devel'? – matzeri

+0

@matzeri si, versione 2.5.1-1 – Omega1001

+0

Ho ricevuto lo stesso errore. Le uniche informazioni utili che ho trovato erano le patch per arc4random.c, non so se forse le patch devono essere applicate prima della compilazione. –

risposta

7

Questo sembra essere causato perché il #if segnala erroneamente che il sistema ha questa funzione. Sono stato in grado di aggirarlo modificando un paio di file.

Aprire libavutil/random_seed.c e potete trovare #if HAVE_ARC4RANDOM, dovrebbe essere intorno alla linea 129, e rimuovere quel blocco di tre linee:

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

Quando si esegue fai di nuovo probabilmente otterrete un altro fallimento simile nella time.c per gettimeofday(), così aperta libavutil/time.c e cercare #if HAVE_GETTIMEOFDAY che dovrebbe essere intorno alla linea 41 e rimuovere il primo blocco lì, in questo modo:

prima di cambiare:

41 #if HAVE_GETTIMEOFDAY 
42  struct timeval tv; 
43  gettimeofday(&tv, NULL); 
44  return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec; 
45 #elif HAVE_GETSYSTEMTIMEASFILETIME 

Dopo aver modificato:

41 #if HAVE_GETSYSTEMTIMEASFILETIME 

Dopo quei due modifiche alla compilazione ricevuti molto più lontano ma non è riuscito a ffserver.c:

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

Per correggere questo errore ho aperto config.mak e ha aggiunto -D_XOPEN_SOURCE=700 alla fine del CFLAGS, in questo modo:

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 spiega un po 'sul perché -D_XOPEN_SOURCE=700 aiuta.

Quindi ho eseguito di nuovo make ed è riuscito infine. Dopo aver eseguito make install tutti i binari sono stati messi in atto e sono stato in grado di usarlo con successo!

+0

Per me la soluzione ha funzionato senza modifiche nel file time.c – porsh

+0

è configurato per rilevare HAVE_ARC4RANDOM in errore qui, o cosa causa il problema iniziale, mi chiedo ... – rogerdpack

Problemi correlati