安装fltk-1.3.3-source.tar.gz时,出现的错误汇总:
错误一:
sudo tar -xvf fltk-1.3.3-source.tar.gz
cd fltk-1.3.3
sudo ccmake ./
sudo make
安装到22%,报错如下:
….
[ 21%] Building C object png/CMakeFiles/fltk_png.dir/pngread.c.o
[ 21%] Building C object png/CMakeFiles/fltk_png.dir/pngset.c.o
[ 22%] Building C object png/CMakeFiles/fltk_png.dir/pngwio.c.o
Linking C static library ../lib/libfltk_png.a
[ 22%] Built target fltk_png
Scanning dependencies of target fltk
[ 22%] Building CXX object src/CMakeFiles/fltk.dir/Fl.cxx.o
In file included from /install/fltk-1.3.3/FL/Fl.H:30:0,
from /install/fltk-1.3.3/src/Fl.cxx:48:
/install/fltk-1.3.3/FL/fl_utf8.h:62:27: fatal error: X11/Xlocale.h: No such file or directory
compilation terminated.
make[2]: *** [src/CMakeFiles/fltk.dir/Fl.cxx.o] Error 1
make[1]: *** [src/CMakeFiles/fltk.dir/all] Error 2
make: *** [all] Error 2
错误原因:缺少Xlib.h,可以通过命令:apt-file search Xlib.h搜索一下,可知其包含在package libx11-dev中。
解决方法: 安装libx11-dev则可:
sudo apt-get install libx11-dev
装完后,进入fltk-1.3.3目录,继续刚刚中断的编译:
sudo make
错误二:
[ 84%] Building CXX object src/CMakeFiles/fltk_images_SHARED.dir/Fl_JPEG_Image.cxx.o
[ 84%] Building CXX object src/CMakeFiles/fltk_images_SHARED.dir/Fl_PNG_Image.cxx.o
[ 84%] Building CXX object src/CMakeFiles/fltk_images_SHARED.dir/Fl_PNM_Image.cxx.o
Linking CXX shared library ../lib/libfltk_imagesd.so
/usr/bin/ld: ../lib/libfltk_jpegd.a(jerror.c.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
../lib/libfltk_jpegd.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [lib/libfltk_imagesd.so.1.3.3] Error 1
make[1]: *** [src/CMakeFiles/fltk_images_SHARED.dir/all] Error 2
make: *** [all] Error 2
这个问题是在开启了编译shared libraries时,才会出现。也就是说在CMake里,你ON了红色部分:
CMAKE_BUILD_TYPE *Debug
CMAKE_INSTALL_PREFIX */usr/local/fltk-1.3.3
OPTION_ARCHFLAGS *
OPTION_BUILD_EXAMPLES *ON
OPTION_BUILD_SHARED_LIBS *ON
OPTION_CAIRO *OFF
OPTION_CAIROEXT *OFF
OPTION_CREATE_LINKS *OFF
OPTION_LARGE_FILE *ON
OPTION_OPTIM *
OPTION_USE_GL *ON
OPTION_USE_POLL *OFF
OPTION_USE_SYSTEM_LIBJPEG *ON
OPTION_USE_SYSTEM_LIBPNG *ON
OPTION_USE_SYSTEM_ZLIB *ON
OPTION_USE_THREADS *ON
OPTION_USE_XCURSOR *ON
OPTION_USE_XDBE *ON
OPTION_USE_XFIXES *ON
OPTION_USE_XFT *ON
OPTION_USE_XINERAMA *ON
解决方法:设置OPTION_BUILD_SHARED_LIBS 为OFF即可。
参考:
http://www.cnblogs.com/hanxi/archive/2012/07/30/2616069.html
错误三:
test@test:/usr/local/src/Mesa_build$ sudo make
CDPATH="${ZSH_VERSION+.}:" && cd /install/Mesa-10.3.5 && /bin/bash /install/Mesa-10.3.5/bin/missing aclocal-1.14 -I m4
/install/Mesa-10.3.5/bin/missing: line 81: aclocal-1.14: command not found
WARNING: 'aclocal-1.14' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
make: *** [/install/Mesa-10.3.5/aclocal.m4] Error 127
错误原因: timestamp skew,从服务器下载来的安装包在本地解压缩文件时时间戳被修改。
解决方法:
在解压后的源文件目录下,
sudo autoreconf -ivf
然后重新编译安装源文件,错误消失。
这个错误的详细描述在这里: “Ubuntun 12.04 WARNING: 'aclocal-1.14' is missing on your system”
错误四:(gcc 4.6.4)
[ 53%] Building CXX object src/CMakeFiles/fltk_images.dir/Fl_GIF_Image.cxx.o
[ 54%] Building CXX object src/CMakeFiles/fltk_images.dir/Fl_Help_Dialog.cxx.o
[ 54%] Building CXX object src/CMakeFiles/fltk_images.dir/Fl_JPEG_Image.cxx.o
/usr/local/src/fltk-1.3.3/src/Fl_JPEG_Image.cxx: In constructor ‘Fl_JPEG_Image::Fl_JPEG_Image(const char*)’:
/usr/local/src/fltk-1.3.3/src/Fl_JPEG_Image.cxx:158:29: error: invalid conversion from ‘int’ to ‘boolean’ [-fpermissive]
/usr/local/include/jpeglib.h:1039:13: error: initializing argument 2 of ‘int jpeg_read_header(j_decompress_ptr, boolean)’ [-fpermissive]
/usr/local/src/fltk-1.3.3/src/Fl_JPEG_Image.cxx: In constructor ‘Fl_JPEG_Image::Fl_JPEG_Image(const char*, const unsigned char*)’:
/usr/local/src/fltk-1.3.3/src/Fl_JPEG_Image.cxx:340:29: error: invalid conversion from ‘int’ to ‘boolean’ [-fpermissive]
/usr/local/include/jpeglib.h:1039:13: error: initializing argument 2 of ‘int jpeg_read_header(j_decompress_ptr, boolean)’ [-fpermissive]
make[2]: *** [src/CMakeFiles/fltk_images.dir/Fl_JPEG_Image.cxx.o] Error 1
make[1]: *** [src/CMakeFiles/fltk_images.dir/all] Error 2
make: *** [all] Error 2
解决方法:
sudo gedit ../src/Fl_JPEG_Image.cxx
Replace this function declaration (in both 158 and 340 line) as:
jpeg_read_header(&dinfo, 1); //the original
with
jpeg_read_header(&dinfo, TRUE); //the changed
This bug is detailed here :“Bug in Fl_JPEG_Image: compile fltk-1.3.3 on gcc-4.6.4”