~siretart/libav/trusty

« back to all changes in this revision

Viewing changes to doc/platform.texi

  • Committer: Reinhard Tartler
  • Date: 2013-10-23 03:04:17 UTC
  • mfrom: (1.3.36 sid)
  • Revision ID: siretart@tauware.de-20131023030417-1o6mpkl1l0raifjt
mergeĀ fromĀ debian

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
@section BSD
28
28
 
29
29
BSD make will not build Libav, you need to install and use GNU Make
30
 
(@file{gmake}).
 
30
(@command{gmake}).
31
31
 
32
32
@section (Open)Solaris
33
33
 
34
 
GNU Make is required to build Libav, so you have to invoke (@file{gmake}),
 
34
GNU Make is required to build Libav, so you have to invoke (@command{gmake}),
35
35
standard Solaris Make will not work. When building with a non-c99 front-end
36
36
(gcc, generic suncc) add either @code{--extra-libs=/usr/lib/values-xpg6.o}
37
37
or @code{--extra-libs=/usr/lib/64/values-xpg6.o} to the configure options
75
75
 
76
76
@chapter Windows
77
77
 
78
 
@section Native Windows compilation
79
 
 
80
 
Libav can be built to run natively on Windows using the MinGW tools. Install
81
 
the latest versions of MSYS and MinGW from @url{http://www.mingw.org/}.
82
 
You can find detailed installation
83
 
instructions in the download section and the FAQ.
84
 
 
85
 
Libav does not build out-of-the-box with the packages the automated MinGW
86
 
installer provides. It also requires coreutils to be installed and many other
87
 
packages updated to the latest version. The minimum version for some packages
88
 
are listed below:
89
 
 
90
 
@itemize
91
 
@item bash 3.1
92
 
@item msys-make 3.81-2 (note: not mingw32-make)
93
 
@item w32api 3.13
94
 
@item mingw-runtime 3.15
95
 
@end itemize
96
 
 
97
 
Libav automatically passes @code{-fno-common} to the compiler to work around
98
 
a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}).
 
78
@section Native Windows compilation using MinGW or MinGW-w64
 
79
 
 
80
Libav can be built to run natively on Windows using the MinGW or MinGW-w64
 
81
toolchains. Install the latest versions of MSYS and MinGW or MinGW-w64 from
 
82
@url{http://www.mingw.org/} or @url{http://mingw-w64.sourceforge.net/}.
 
83
You can find detailed installation instructions in the download section and
 
84
the FAQ.
99
85
 
100
86
Notes:
101
87
 
104
90
@item Building natively using MSYS can be sped up by disabling implicit rules
105
91
in the Makefile by calling @code{make -r} instead of plain @code{make}. This
106
92
speed up is close to non-existent for normal one-off builds and is only
107
 
noticeable when running make for a second time (for example in
 
93
noticeable when running make for a second time (for example during
108
94
@code{make install}).
109
95
 
110
96
@item In order to compile AVplay, you must have the MinGW development library
111
 
of @uref{http://www.libsdl.org/, SDL}.
112
 
Edit the @file{bin/sdl-config} script so that it points to the correct prefix
113
 
where SDL was installed. Verify that @file{sdl-config} can be launched from
114
 
the MSYS command line.
 
97
of @uref{http://www.libsdl.org/, SDL} and @code{pkg-config} installed.
115
98
 
116
99
@item By using @code{./configure --enable-shared} when configuring Libav,
117
 
you can build libavutil, libavcodec and libavformat as DLLs.
118
 
 
119
 
@end itemize
120
 
 
121
 
@section Microsoft Visual C++ compatibility
122
 
 
123
 
As stated in the FAQ, Libav will not compile under MSVC++. However, if you
124
 
want to use the libav* libraries in your own applications, you can still
125
 
compile those applications using MSVC++. But the libav* libraries you link
126
 
to @emph{must} be built with MinGW. However, you will not be able to debug
127
 
inside the libav* libraries, since MSVC++ does not recognize the debug
128
 
symbols generated by GCC.
129
 
We strongly recommend you to move over from MSVC++ to MinGW tools.
130
 
 
131
 
This description of how to use the Libav libraries with MSVC++ is based on
132
 
Microsoft Visual C++ 2005 Express Edition. If you have a different version,
133
 
you might have to modify the procedures slightly.
134
 
 
135
 
@subsection Using static libraries
136
 
 
137
 
Assuming you have just built and installed Libav in @file{/usr/local}.
138
 
 
139
 
@enumerate
140
 
 
141
 
@item Create a new console application ("File / New / Project") and then
142
 
select "Win32 Console Application". On the appropriate page of the
143
 
Application Wizard, uncheck the "Precompiled headers" option.
144
 
 
145
 
@item Write the source code for your application, or, for testing, just
146
 
copy the code from an existing sample application into the source file
147
 
that MSVC++ has already created for you. For example, you can copy
148
 
@file{libavformat/output-example.c} from the Libav distribution.
149
 
 
150
 
@item Open the "Project / Properties" dialog box. In the "Configuration"
151
 
combo box, select "All Configurations" so that the changes you make will
152
 
affect both debug and release builds. In the tree view on the left hand
153
 
side, select "C/C++ / General", then edit the "Additional Include
154
 
Directories" setting to contain the path where the Libav includes were
155
 
installed (i.e. @file{c:\msys\1.0\local\include}).
156
 
Do not add MinGW's include directory here, or the include files will
157
 
conflict with MSVC's.
158
 
 
159
 
@item Still in the "Project / Properties" dialog box, select
160
 
"Linker / General" from the tree view and edit the
161
 
"Additional Library Directories" setting to contain the @file{lib}
162
 
directory where Libav was installed (i.e. @file{c:\msys\1.0\local\lib}),
163
 
the directory where MinGW libs are installed (i.e. @file{c:\mingw\lib}),
164
 
and the directory where MinGW's GCC libs are installed
165
 
(i.e. @file{C:\mingw\lib\gcc\mingw32\4.2.1-sjlj}). Then select
166
 
"Linker / Input" from the tree view, and add the files @file{libavformat.a},
167
 
@file{libavcodec.a}, @file{libavutil.a}, @file{libmingwex.a},
168
 
@file{libgcc.a}, and any other libraries you used (i.e. @file{libz.a})
169
 
to the end of "Additional Dependencies".
170
 
 
171
 
@item Now, select "C/C++ / Code Generation" from the tree view. Select
172
 
"Debug" in the "Configuration" combo box. Make sure that "Runtime
173
 
Library" is set to "Multi-threaded Debug DLL". Then, select "Release" in
174
 
the "Configuration" combo box and make sure that "Runtime Library" is
175
 
set to "Multi-threaded DLL".
176
 
 
177
 
@item Click "OK" to close the "Project / Properties" dialog box.
178
 
 
179
 
@item MSVC++ lacks some C99 header files that are fundamental for Libav.
180
 
Get msinttypes from @url{http://code.google.com/p/msinttypes/downloads/list}
181
 
and install it in MSVC++'s include directory
182
 
(i.e. @file{C:\Program Files\Microsoft Visual Studio 8\VC\include}).
183
 
 
184
 
@item MSVC++ also does not understand the @code{inline} keyword used by
185
 
Libav, so you must add this line before @code{#include}ing libav*:
186
 
@example
187
 
#define inline _inline
188
 
@end example
189
 
 
190
 
@item Build your application, everything should work.
191
 
 
192
 
@end enumerate
193
 
 
194
 
@subsection Using shared libraries
195
 
 
196
 
This is how to create DLL and LIB files that are compatible with MSVC++:
197
 
 
198
 
Within the MSYS shell, build Libav with
199
 
 
200
 
@example
201
 
./configure --enable-shared
 
100
you can build all libraries as DLLs.
 
101
 
 
102
@end itemize
 
103
 
 
104
@section Microsoft Visual C++
 
105
 
 
106
Libav can be built with MSVC using a C99-to-C89 conversion utility and
 
107
wrapper.
 
108
 
 
109
You will need the following prerequisites:
 
110
 
 
111
@itemize
 
112
@item @uref{https://github.com/libav/c99-to-c89/, C99-to-C89 Converter & Wrapper}
 
113
@item @uref{http://code.google.com/p/msinttypes/, msinttypes}
 
114
@item @uref{http://www.mingw.org/, MSYS}
 
115
@item @uref{http://yasm.tortall.net/, YASM}
 
116
@item @uref{http://gnuwin32.sourceforge.net/packages/bc.htm, bc for Windows} if
 
117
you want to run @uref{fate.html, FATE}.
 
118
@end itemize
 
119
 
 
120
To set up a proper MSVC environment in MSYS, you simply need to run
 
121
@code{msys.bat} from the Visual Studio command prompt.
 
122
 
 
123
Place @code{makedef}, @code{c99wrap.exe}, @code{c99conv.exe}, and @code{yasm.exe}
 
124
somewhere in your @code{PATH}.
 
125
 
 
126
Next, make sure @code{inttypes.h} and any other headers and libs you want to use
 
127
are located in a spot that MSVC can see. Do so by modifying the @code{LIB} and
 
128
@code{INCLUDE} environment variables to include the @strong{Windows} paths to
 
129
these directories. Alternatively, you can try and use the
 
130
@code{--extra-cflags}/@code{--extra-ldflags} configure options.
 
131
 
 
132
Finally, run:
 
133
 
 
134
@example
 
135
./configure --toolchain=msvc
202
136
make
203
137
make install
204
138
@end example
205
139
 
206
 
Your install path (@file{/usr/local/} by default) should now have the
207
 
necessary DLL and LIB files under the @file{bin} directory.
208
 
 
209
 
Alternatively, build the libraries with a cross compiler, according to
210
 
the instructions below in @ref{Cross compilation for Windows with Linux}.
211
 
 
212
 
To use those files with MSVC++, do the same as you would do with
213
 
the static libraries, as described above. But in Step 4,
214
 
you should only need to add the directory where the LIB files are installed
215
 
(i.e. @file{c:\msys\usr\local\bin}). This is not a typo, the LIB files are
216
 
installed in the @file{bin} directory. And instead of adding the static
217
 
libraries (@file{libxxx.a} files) you should add the MSVC import libraries
218
 
(@file{avcodec.lib}, @file{avformat.lib}, and
219
 
@file{avutil.lib}). Note that you should not use the GCC import
220
 
libraries (@file{libxxx.dll.a} files), as these will give you undefined
221
 
reference errors. There should be no need for @file{libmingwex.a},
222
 
@file{libgcc.a}, and @file{wsock32.lib}, nor any other external library
223
 
statically linked into the DLLs.
 
140
If you wish to compile shared libraries, add @code{--enable-shared} to your
 
141
configure options. Note that due to the way MSVC handles DLL imports and
 
142
exports, you cannot compile static and shared libraries at the same time, and
 
143
enabling shared libraries will automatically disable the static ones.
 
144
 
 
145
Notes:
 
146
 
 
147
@itemize
 
148
 
 
149
@item It is possible that coreutils' @code{link.exe} conflicts with MSVC's linker.
 
150
You can find out by running @code{which link} to see which @code{link.exe} you
 
151
are using. If it is located at @code{/bin/link.exe}, then you have the wrong one
 
152
in your @code{PATH}. Either move or remove that copy, or make sure MSVC's
 
153
@code{link.exe} takes precedence in your @code{PATH} over coreutils'.
 
154
 
 
155
@item If you wish to build with zlib support, you will have to grab a compatible
 
156
zlib binary from somewhere, with an MSVC import lib, or if you wish to link
 
157
statically, you can follow the instructions below to build a compatible
 
158
@code{zlib.lib} with MSVC. Regardless of which method you use, you must still
 
159
follow step 3, or compilation will fail.
 
160
@enumerate
 
161
@item Grab the @uref{http://zlib.net/, zlib sources}.
 
162
@item Edit @code{win32/Makefile.msc} so that it uses -MT instead of -MD, since
 
163
this is how Libav is built as well.
 
164
@item Edit @code{zconf.h} and remove its inclusion of @code{unistd.h}. This gets
 
165
erroneously included when building Libav.
 
166
@item Run @code{nmake -f win32/Makefile.msc}.
 
167
@item Move @code{zlib.lib}, @code{zconf.h}, and @code{zlib.h} to somewhere MSVC
 
168
can see.
 
169
@end enumerate
 
170
 
 
171
@item Libav has been tested with Visual Studio 2010 and 2012, Pro and Express.
 
172
Anything else is not officially supported.
 
173
 
 
174
@end itemize
 
175
 
 
176
@subsection Linking to Libav with Microsoft Visual C++
 
177
 
 
178
If you plan to link with MSVC-built static libraries, you will need
 
179
to make sure you have @code{Runtime Library} set to
 
180
@code{Multi-threaded (/MT)} in your project's settings.
224
181
 
225
182
Libav headers do not declare global data for Windows DLLs through the usual
226
183
dllexport/dllimport interface. Such data will be exported properly while
227
 
building, but to use them in your MSVC++ code you will have to edit the
 
184
building, but to use them in your MSVC code you will have to edit the
228
185
appropriate headers and mark the data as dllimport. For example, in
229
186
libavutil/pixdesc.h you should have:
230
187
@example
231
188
extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[];
232
189
@end example
233
190
 
234
 
Note that using import libraries created by dlltool requires
235
 
the linker optimization option to be set to
236
 
"References: Keep Unreferenced Data (@code{/OPT:NOREF})", otherwise
237
 
the resulting binaries will fail during runtime. This isn't
238
 
required when using import libraries generated by lib.exe.
 
191
You will also need to define @code{inline} to something MSVC understands:
 
192
@example
 
193
#define inline __inline
 
194
@end example
 
195
 
 
196
Also note, that as stated in @strong{Microsoft Visual C++}, you will need
 
197
an MSVC-compatible @uref{http://code.google.com/p/msinttypes/, inttypes.h}.
 
198
 
 
199
If you plan on using import libraries created by dlltool, you must
 
200
set @code{References} to @code{No (/OPT:NOREF)} under the linker optimization
 
201
settings, otherwise the resulting binaries will fail during runtime.
 
202
This is not required when using import libraries generated by @code{lib.exe}.
239
203
This issue is reported upstream at
240
204
@url{http://sourceware.org/bugzilla/show_bug.cgi?id=12633}.
241
205
 
244
208
 
245
209
@enumerate
246
210
 
247
 
@item Open @file{Visual Studio 2005 Command Prompt}.
 
211
@item Open the @emph{Visual Studio Command Prompt}.
248
212
 
249
213
Alternatively, in a normal command line prompt, call @file{vcvars32.bat}
250
214
which sets up the environment variables for the Visual C++ tools
251
 
(the standard location for this file is
252
 
@file{C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat}).
 
215
(the standard location for this file is something like
 
216
@file{C:\Program Files (x86_\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat}).
253
217
 
254
218
@item Enter the @file{bin} directory where the created LIB and DLL files
255
219
are stored.
256
220
 
257
 
@item Generate new import libraries with @file{lib.exe}:
 
221
@item Generate new import libraries with @command{lib.exe}:
258
222
 
259
223
@example
260
 
lib /machine:i386 /def:..\lib\avcodec-53.def  /out:avcodec.lib
261
 
lib /machine:i386 /def:..\lib\avdevice-53.def /out:avdevice.lib
262
 
lib /machine:i386 /def:..\lib\avfilter-2.def  /out:avfilter.lib
263
 
lib /machine:i386 /def:..\lib\avformat-53.def /out:avformat.lib
264
 
lib /machine:i386 /def:..\lib\avutil-51.def   /out:avutil.lib
265
 
lib /machine:i386 /def:..\lib\swscale-2.def   /out:swscale.lib
 
224
lib /machine:i386 /def:..\lib\foo-version.def  /out:foo.lib
266
225
@end example
267
226
 
 
227
Replace @code{foo-version} and @code{foo} with the respective library names.
 
228
 
268
229
@end enumerate
269
230
 
270
231
@anchor{Cross compilation for Windows with Linux}
293
254
binutils, gcc4-core, make, git, mingw-runtime, texi2html
294
255
@end example
295
256
 
296
 
And the following "Utils" one:
297
 
@example
298
 
diffutils
299
 
@end example
300
 
 
301
 
Then run
302
 
 
303
 
@example
304
 
./configure
305
 
@end example
306
 
 
307
 
to make a static build.
308
 
 
309
 
The current @code{gcc4-core} package is buggy and needs this flag to build
310
 
shared libraries:
311
 
 
312
 
@example
313
 
./configure --enable-shared --disable-static --extra-cflags=-fno-reorder-functions
 
257
In order to run FATE you will also need the following "Utils" packages:
 
258
@example
 
259
bc, diffutils
314
260
@end example
315
261
 
316
262
If you want to build Libav with additional libraries, download Cygwin
323
269
@uref{http://sourceware.org/cygwinports/, Cygwin Ports}:
324
270
 
325
271
@example
326
 
yasm, libSDL-devel, libdirac-devel, libfaac-devel, libgsm-devel,
327
 
libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel,
328
 
libxvidcore-devel
 
272
yasm, libSDL-devel, libfaac-devel, libgsm-devel, libmp3lame-devel,
 
273
libschroedinger1.0-devel, speex-devel, libtheora-devel, libxvidcore-devel
329
274
@end example
330
275
 
331
 
The recommendation for libnut and x264 is to build them from source by
332
 
yourself, as they evolve too quickly for Cygwin Ports to be up to date.
333
 
 
334
 
Cygwin 1.7.x has IPv6 support. You can add IPv6 to Cygwin 1.5.x by means
335
 
of the @code{libgetaddrinfo-devel} package, available at Cygwin Ports.
 
276
The recommendation for x264 is to build it from source, as it evolves too
 
277
quickly for Cygwin Ports to be up to date.
336
278
 
337
279
@section Crosscompilation for Windows under Cygwin
338
280
 
356
298
./configure --target-os=mingw32 --enable-shared --disable-static --extra-cflags=-mno-cygwin --extra-libs=-mno-cygwin
357
299
@end example
358
300
 
 
301
@chapter Plan 9
 
302
 
 
303
The native @uref{http://plan9.bell-labs.com/plan9/, Plan 9} compiler
 
304
does not implement all the C99 features needed by Libav so the gcc
 
305
port must be used.  Furthermore, a few items missing from the C
 
306
library and shell environment need to be fixed.
 
307
 
 
308
@itemize
 
309
 
 
310
@item GNU awk, grep, make, and sed
 
311
 
 
312
Working packages of these tools can be found at
 
313
@uref{http://code.google.com/p/ports2plan9/downloads/list, ports2plan9}.
 
314
They can be installed with @uref{http://9front.org/, 9front's} @code{pkg}
 
315
utility by setting @code{pkgpath} to
 
316
@code{http://ports2plan9.googlecode.com/files/}.
 
317
 
 
318
@item Missing/broken @code{head} and @code{printf} commands
 
319
 
 
320
Replacements adequate for building Libav can be found in the
 
321
@code{compat/plan9} directory.  Place these somewhere they will be
 
322
found by the shell.  These are not full implementations of the
 
323
commands and are @emph{not} suitable for general use.
 
324
 
 
325
@item Missing C99 @code{stdint.h} and @code{inttypes.h}
 
326
 
 
327
Replacement headers are available from
 
328
@url{http://code.google.com/p/plan9front/issues/detail?id=152}.
 
329
 
 
330
@item Missing or non-standard library functions
 
331
 
 
332
Some functions in the C library are missing or incomplete.  The
 
333
@code{@uref{http://ports2plan9.googlecode.com/files/gcc-apelibs-1207.tbz,
 
334
gcc-apelibs-1207}} package from
 
335
@uref{http://code.google.com/p/ports2plan9/downloads/list, ports2plan9}
 
336
includes an updated C library, but installing the full package gives
 
337
unusable executables.  Instead, keep the files from @code{gccbin.tgz}
 
338
under @code{/386/lib/gnu}.  From the @code{libc.a} archive in the
 
339
@code{gcc-apelibs-1207} package, extract the following object files and
 
340
turn them into a library:
 
341
 
 
342
@itemize
 
343
@item @code{strerror.o}
 
344
@item @code{strtoll.o}
 
345
@item @code{snprintf.o}
 
346
@item @code{vsnprintf.o}
 
347
@item @code{vfprintf.o}
 
348
@item @code{_IO_getc.o}
 
349
@item @code{_IO_putc.o}
 
350
@end itemize
 
351
 
 
352
Use the @code{--extra-libs} option of @code{configure} to inform the
 
353
build system of this library.
 
354
 
 
355
@item FPU exceptions enabled by default
 
356
 
 
357
Unlike most other systems, Plan 9 enables FPU exceptions by default.
 
358
These must be disabled before calling any Libav functions.  While the
 
359
included tools will do this automatically, other users of the
 
360
libraries must do it themselves.
 
361
 
 
362
@end itemize
 
363
 
359
364
@bye