[MinGW & ffmpeg] Hoe sample te compileren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Xymox
  • Registratie: Februari 2002
  • Laatst online: 09-09 13:19

Xymox

Determinism rulez !

Topicstarter
Ik wil mij gaan bezighouden met het bouwen van kleine applicaties die mbv ffmpeg bewerkingen uitvoeren op videobestanden. En dit op het Windows platform.

Ik heb daarvoor MinGW nodig en uiteraard ffmpeg.

Ik heb het al voor elkaar om eerst ffmpeg te compileren en dus ffmpeg.exe te genereren.
Maar nu dus een eigen C applicatie die gebruik maakt van de ffmpeg library.

Ik heb een voorbeeld C source van onderstaande site gehaald
http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html

En hier probeer ik de sample te compileren:

code:
1
2
3
4
$ gcc avcodec_sample.c -o avcodec_sample -lavformat -lavcodec -lz

avcodec_sample.c:20:21: fatal error: avcodec.h: No such file or directory
compilation terminated.


Dus kan de header files van ffmpeg niet vinden:

code:
1
2
#include <avcodec.h>
#include <avformat.h>


De vraag is, hoe ik gcc alles van ffmpeg kan laten vinden.

Dit is zijn mijn installatie locaties:

code:
1
2
D:\mingw
D:\ffmpeg-0.6.1


Ik plaats de sample C source in de ffmpeg-0.6.1 folder en ga in mysys in die folder staan waar ik het gcc start zoals hierboven beschreven.

Uiteraard zal ik de locatie van ffmpeg header/lib etc files ergens op moeten geven.

Wie kan mij verder helpen?

Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

de "-I"optie gebruiken om aan te geven waar de extra Include files staan.

http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

Je zult ook moeten aangeven waar de library (.a ?) files staan.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Xymox
  • Registratie: Februari 2002
  • Laatst online: 09-09 13:19

Xymox

Determinism rulez !

Topicstarter
Bedank voor je info naar de -I switches.
Inderdaad, daarmee zijn andere paths op te geven naast de default paths.

Ik wil wel graag even deze thread compleet maken zodat anderen die wellicht ook tegen dit issue aanlopen en deze thread tegenkomen de complete informatie hebben.

Ok, dit is een voorbeeld gcc commando die je hier en daar vind op websites met tutorials en samples, maar niet zondermeer op MinGW en gcc op Windows werken.

code:
1
gcc tutorial01.c -o tutorial01 -lavformat -lavcodec -lavutil -lm -lz


Hier staat dus dat gcc het C sourcebestand tutorial01.c gaat builden naar tutorial01.exe.
Daarbij zal gcc 5 libraries bijlinken (de switches -lavformat t/m -lz aan het eind van de gcc regel)

Om gcc aan te geven waar de eventuele .h header files gevonden kunnen worden kan je met de -I switch dit aangeven.

Uitgaande van deze situatie van installaties van mingw en ffmpeg

code:
1
2
D:\mingw
D:\ffmpeg-0.6.1


en de gedefinieerde #inludes van tutorial01.c zal je deze switch moeten opgeven:

code:
1
-I"/d/ffmpeg-0.6.1"


Daarmee kunnen alle .h files gevonden worden. De includes binnen ffmpeg .c en .h files zijn relatief aan de hoofdfolder van ffmpeg.

Echter omdat er ook libraries (.a of .o files) meegelinkt moeten worden zullen ook de locaties van die bestanden opgegeven worden.
De switch -lz werkt niet in windows mingw. Deze moet zijn -lws2_32.
Verder is er een -lm switch (de math library) en die staat niet bij ffmpeg maar bij de libs van mingw zelf.

Dus in totaal zullen er deze -L switches opgegeven moeten worden :

code:
1
2
3
4
5
-L"/D/MinGW/lib"
-L"/d/ffmpeg-0.6.1"/libavdevice
-L"/d/ffmpeg-0.6.1"/libavformat
-L"/d/ffmpeg-0.6.1"/libavcodec
-L"/d/ffmpeg-0.6.1"/libavutil


Alles bij elkaar zal dit het gcc commando zijn:

code:
1
gcc tutorial01.c -o tutorial01 -L"/D/MinGW/lib" -L"/d/ffmpeg-0.6.1"/libavdevice -L"/d/ffmpeg-0.6.1"/libavformat -L"/d/ffmpeg-0.6.1"/libavcodec -L"/d/ffmpeg-0.6.1"/libavutil -I"/d/ffmpeg-0.6.1" -lavformat -lavcodec -lavutil -lm -lws2_32


Met bovenstaande gcc kan ik nu binnen eigen C sources gebruik maken van de ffmpeg functionaliteit.

Intel i9-9900K | MSI MPG Z390 Gaming Pro Carbon | MSI RTX 2080Ti Gaming X Trio | Ballistix Sport LT (32GB) | MSI Optix MAG274QRF-QD 1440p | Samsung 970 EVO Plus (2TB) | NZXT Kraken X52 | Valve Index | Fractal Design R6 | Synology DS420j