Cygwin 编译 VLC
遇到了这么多问题,不过还好最后编译过去了。
问题
1:
gcc -mno-cygwin -Wsign-compare
-Wall -mms-bitfields -pipe -o libaccess_output_dummy_plugin.dll
-g
-shared -u _vlc_entry__0_8_6 -L/usr/win32/lib
libaccess_output_dummy_plugin.a -L/usr/local/lib
if gcc -mno-cygwin -DHAVE_CONFIG_H -I. -I.
-I../.. -I/usr/win32/include
-I/usr/win32/include/ebm
l -D_OFF_T_ -D_off_t=long -DSYS_MINGW32 -I../../include
`top_builddir="../.." ../../vlc-config --c
flags plugin access_output_file` -Wsign-compare
-Wall -mms-bitfields -pipe -MT
libaccess_output_f
ile_plugin_a-file.o -MD -MP -MF
".deps/libaccess_output_file_plugin_a-file.Tpo" -c -o
libaccess_ou
tput_file_plugin_a-file.o `test -f 'file.c' || echo './'`file.c;
\
then mv -f ".deps/libaccess_output_file_plugin_a-file.Tpo"
".deps/libaccess_output_file_pl
ugin_a-file.Po"; else rm -f
".deps/libaccess_output_file_plugin_a-file.Tpo"; exit 1; fi
In file included from file.c:30:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/sys/stat.h:113:
error: pars
e error before "off_t"
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/sys/stat.h:118:
error: pars
e error before '}' token
make[4]: *** [libaccess_output_file_plugin_a-file.o] 错误 1
make[4]: Leaving directory
`/tmp/vlc-0.8.6i/modules/access_output'
make[3]: *** [all-modules] 错误 1
make[3]: Leaving directory
`/tmp/vlc-0.8.6i/modules/access_output'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/tmp/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/tmp/vlc-0.8.6i'
make: *** [all] 错误 2
解决办法:
/usr/i686-pc-mingw32/include/sys目录下
在stat.h的文件开始处添加
#ifndef _OFF_T DEFINED
typedef long off_t;
#define _OFF_T DEFINED
#endif
问题
2:
gcc -mno-cygwin -Wsign-compare
-Wall -mms-bitfields -pipe -o libdtstofloat32_plugin.dll -g
-shared
-u _vlc_entry__0_8_6 -L/usr/win32/lib libdtstofloat32_plugin.a -L/usr/local/lib
-ldts_pic
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o):
In function `Open':
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:219:
undefined reference to `_dca_in
it'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o):
In function `DoWork':
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:303:
undefined reference to `_dca_sy
ncinfo'
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:312:
undefined reference to `_dca_fr
ame'
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:331:
undefined reference to `_dca_bl
ocks_num'
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:335:
undefined reference to `_dca_bl
ock'
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:341:
undefined reference to `_dca_sa
mples'
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:331:
undefined reference to `_dca_bl
ocks_num'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o):
In function `Destroy':
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:376:
undefined reference to `_dca_fr
ee'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o):
In function `CloseFilter':
/tmp/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:430:
undefined reference to `_dca_fr
ee'
collect2: ld returned 1 exit status
make[6]: *** [libdtstofloat32_plugin.dll] 错误 1
make[6]: Leaving directory
`/tmp/vlc-0.8.6i/modules/audio_filter/converter'
make[5]: *** [all-modules] 错误 1
make[5]: Leaving directory
`/tmp/vlc-0.8.6i/modules/audio_filter/converter'
make[4]: *** [all-recursive] 错误 1
make[4]: Leaving directory
`/tmp/vlc-0.8.6i/modules/audio_filter'
make[3]: *** [all] 错误 2
make[3]: Leaving directory
`/tmp/vlc-0.8.6i/modules/audio_filter'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/tmp/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/tmp/vlc-0.8.6i'
make: *** [all] 错误 2
解决方法:
./configure 后会生成 vlc-config
文件
修改 vlc-config 文件中
dtstofloat32)
ldflags="${ldflags} -ldts_pic"
为:
dtstofloat32)
ldflags="${ldflags} -ldts"
重新make
问题
3:gcc
-mno-cygwin -Wsign-compare -Wall -mms-bitfields -pipe -o
libflacdec_plugin.dll -g -shared -u _
vlc_entry__0_8_6 -L/usr/win32/lib
libflacdec_plugin.a -L/usr/local/lib /usr/win32/lib/libFLAC.a
-
lm /usr/win32/lib/libogg.a
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x3fb):
undefined reference to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x488):
undefined reference to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x4e5):
undefined reference to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x57f):
undefined reference to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x5d5):
undefined reference to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x66f):
more undefined references to `_ntohl@4'
follow
collect2: ld returned 1 exit status
make[4]: *** [libflacdec_plugin.dll] 错误 1
make[4]: Leaving directory `/tmp/vlc-0.8.6i/modules/codec'
make[3]: *** [all-modules] 错误 1
make[3]: Leaving directory `/tmp/vlc-0.8.6i/modules/codec'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/tmp/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/tmp/vlc-0.8.6i'
make: *** [all] 错误 2
解决方法:
./configure 后会生成 vlc-config
文件
修改 vlc-config 文件中
flacdec)
ldflags="${ldflags} -lFLAC"
为:
flacdec)
ldflags="${ldflags} -lFLAC -lws2_32"
重新make
问题
4:
Making all in activex
make[2]: Entering directory `/tmp/vlc-0.8.6i/activex'
make all-am
make[3]: Entering directory `/tmp/vlc-0.8.6i/activex'
if g++ -mno-cygwin -DHAVE_CONFIG_H -I. -I.
-I.. -I/usr/win32/include
-I/usr/win32/include/ebml -
D_OFF_T_ -D_off_t=long -DSYS_MINGW32 -I../include
`top_builddir=".." ../vlc-config --cxxflags acti
vex` -Wsign-compare -Wall -mms-bitfields -pipe -MT libaxvlc_a-main.o -MD
-MP -MF ".deps/libaxvlc
_a-main.Tpo" -c -o libaxvlc_a-main.o `test -f 'main.cpp' || echo
'./'`main.cpp; \
then mv -f ".deps/libaxvlc_a-main.Tpo" ".deps/libaxvlc_a-main.Po";
else rm -f ".deps/libax
vlc_a-main.Tpo"; exit 1; fi
In file included from
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/cwchar:54,
from
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/bits/postypes.h:46,
from
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/iosfwd:50,
from
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/bits/stl_algobase.h:70,
from
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/c++/vector:67,
from utils.h:28,
from main.cpp:24:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/wchar.h:419:
error: `off_t'
does not name a type
make[3]: *** [libaxvlc_a-main.o] 错误 1
make[3]: Leaving directory `/tmp/vlc-0.8.6i/activex'
make[2]: *** [all] 错误 2
make[2]: Leaving directory `/tmp/vlc-0.8.6i/activex'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/tmp/vlc-0.8.6i'
make: *** [all] 错误 2
解决办法:
/usr/i686-pc-mingw32/include/目录下
在wchar.h的文件开始处添加
#ifndef _OFF_T DEFINED
typedef long off_t;
#define _OFF_T DEFINED
#endif
问题 5:
编译成功后运行vlc.exe
bash: ./vlc.exe: Permission
denied
解决办法:
aaronvox#aaronvox
/tmp/vlc-0.8.6i
$ chmod 755 vlc.exe vlc.exe.manifest
aaronvox#aaronvox
/tmp/vlc-0.8.6i
$ ./vlc.exe
哇咔咔咔咔~~~~~~~~~~臭美一会~~~~~