Intel Jpeg library 編譯 x64 版本(ipp 6.0)
有很多人發現還是無法compile,特此更正幾點注意事項:
1,如果你要build 64bit的ijl,請安裝Intel IPP em64t版本,譬如w_ipp_em64t_p_6.0.0.130.exe、w_ipp_em64t_p_6.0.2.074.exe,只是不同的版本。
2,需要安裝Intel compiler 或者 Visual Studio,VS預設支援的版本包括 VS2003、VS2005、VS2008,如果不是這些版本,可以通過修改env來支援
譬如需要支援VS2010,需要新增修改的幾個檔案,下面給出一個sample,支援VS2005、VS2008、VS2010進行build。
(sample path為 ipp-samples\image-codecs\jpeg-ijl )
a) 新增 buildem64t.bat,路徑 ipp-samples\image-codecs\jpeg-ijl\
@echo off rem rem INTEL CORPORATION PROPRIETARY INFORMATION rem This software is supplied under the terms of a license agreement or rem nondisclosure agreement with Intel Corporation and may not be copied rem or disclosed except in accordance with the terms of that agreement. rem Copyright(c) 2007-2008 Intel Corporation. All Rights Reserved. rem cls REM REM Usage: REM build{32|64|em64t}.bat [ cl7 | cl8 | cl9 | cl10 | icl101 | icl110 ] REM :::::::::::::::::: setlocal set ARG=%1 @CALL:GET_VARS @%HEADER% @%GET_ENVIRONMENT% nmake clean ARCH=%ARCH% nmake ARCH=%ARCH% CC=%COMPILER% LINKAGE="dynamic" @%FOOTER% endlocal GOTO:EOF :::::::::::::::::::: :GET_VARS set SCRIPT=%~n0 set ENV_FILE=env.bat SET PLTF=%SCRIPT:build=% SET ARCH=win%PLTF% IF "%PLTF%" == "32" SET ARCH_C= IF "%PLTF%" == "64" SET ARCH_C=64 IF "%PLTF%" == "em64t" SET ARCH_C=em64t SET x=%~d0%~p0 SET y=%x:\ipp-samples\=*% FOR /F "tokens=1 delims=*" %%i IN ("%y%") DO SET SAMPLES_ROOT=%%i\ipp-samples\ SET HEADER=CALL "%SAMPLES_ROOT%\tools\env\tools" TYPE_HEADER SET FOOTER=CALL "%SAMPLES_ROOT%\tools\env\tools" TYPE_FOOTER SET GET_ENVIRONMENT=PUSHD "%SAMPLES_ROOT%\tools\env" ^& CALL %ENV_FILE% ^& POPD EXIT /B
b) 新增 winem64t.ini,路徑 ipp-samples\image-codecs\jpeg-ijl\
#!INCLUDE <win32.mak>
LIB_ARCH = em64t
LINK_ARCH = AMD64
c) 修改 env.bat,路徑 ipp-samples\tools\env\
@echo off rem rem INTEL CORPORATION PROPRIETARY INFORMATION rem This software is supplied under the terms of a license agreement or rem nondisclosure agreement with Intel Corporation and may not be copied rem or disclosed except in accordance with the terms of that agreement. rem Copyright(c) 2007-2008 Intel Corporation. All Rights Reserved. rem rem rem Usage: rem This scipt has to be called from sample's build*.bat files rem :::::::::::::::::::: set IPPVER=6.0 :::::::::::::::::::: For /F "delims=;." %%i IN ('Cmd /c Ver') DO ( IF "%%i"=="Microsoft Windows XP [Version 5" ( SET vsdk_arg=/xp ) ELSE IF "%%i"=="Microsoft Windows [Version 5" ( SET vsdk_arg=/2003 ) ELSE IF "%%i"=="Microsoft Windows [Version 6" ( SET vsdk_arg=/vista ) ELSE ( SET vsdk_arg=/vista ) ) set PrF=%ProgramFiles% set IPP_CPU_TYPE=%PROCESSOR_ARCHITECTURE% if /I "%PROCESSOR_ARCHITECTURE%"=="x86" if defined PROCESSOR_ARCHITEW6432 set IPP_CPU_TYPE=%PROCESSOR_ARCHITEW6432% if /I "%PROCESSOR_ARCHITECTURE%"=="x86" if defined PROCESSOR_ARCHITEW6432 set PrF=%ProgramFiles(x86)% if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" set PrF=%ProgramFiles(x86)% set ProComp=%ProgramFiles(x86)% if /I "%PROCESSOR_ARCHITECTURE%"=="x86" set ProComp=%ProgramFiles% if "%ARCH%" == "win32" ( set AR=IA32 set vsdk_opt="/x86 %vsdk_arg%" set MSAR=vcvars32.bat set icl_opt=ia32 ) if "%ARCH%" == "win64" ( set AR=Itanium set MSAR=x86_ia64\vcvarsx86_ia64.bat if "%PROCESSOR_ARCHITECTURE%"=="IA64" set MSAR=ia64\vcvarsia64.bat set vsdk_opt="/ia64 %vsdk_arg%" set sdk_opt="/SRV64 /RETAIL" set icl_opt=ia32_ia64 if "%IPP_CPU_TYPE%"=="IA64" set icl_opt=ia64 ) if "%ARCH%" == "winem64t" ( set AR=EM64T set MSAR=x86_amd64\vcvarsx86_amd64.bat if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set MSAR=amd64\vcvars64.bat set vsdk_opt="/x64 %vsdk_arg%" set sdk_opt="/X64 /RETAIL" set icl_opt=ia32_intel64 if "%IPP_CPU_TYPE%"=="AMD64" set icl_opt=intel64 if "%ARG%"=="ipc2009" set icl_opt=ia32_intel64 ) if "%ARCH%" == "winwceixp" ( set AR=IXP SET LINKAGE=static SET ARG=clarm ) if "%ARCH%" == "winwcex86" ( set AR=IA32 SET LINKAGE=static SET ARG=ecl ) if not defined AR ( @call :ERR "Invalid %AR% Architecture configuration" GOTO:EOF ) @echo +++ %AR% architecture is picked out. rem Definition of custom environment set __EXTERN_TOOL=extern_tools_%AR%.bat if exist %__EXTERN_TOOL% ( @call %__EXTERN_TOOL% goto setenv ) @call search_compilers :setenv @call %TOOL% %icl_opt% if not defined IPPROOT goto try2find set IPPENVF="%IPPROOT%\tools\env\ippenv%ARCH_C%.bat" if not exist %IPPENVF% ( @call :WRN "Custom environment for IPP %AR% is not found." goto try2find ) set IPPVER=custom set IPPENV=%IPPENVF% set IPPCUSTOM=OK set lib=%IPPROOT%\lib;%IPPROOT%\stublib;%lib% set include=%IPPROOT%\include;%include% set path=%IPPROOT%\bin;%path% @echo +++ Custom Intel(R) IPP %IPPVER% environment is found at %IPPENV% goto:eof :try2find for /F %%i in ( 'dir /b /on "%ProgramFiles%\Intel\IPP\%IPPVER%*"') do ( set IPPENVF="%ProgramFiles%\Intel\IPP\%%i\%AR%\tools\env\ippenv%ARCH_C%.bat" ) if exist %IPPENVF% ( set IPPENV=%IPPENVF% & goto begin ) for /F %%i in ( 'dir /b /on "%ProgramFiles(x86)%\Intel\IPP\%IPPVER%*"') do ( set IPPENVF="%ProgramFiles(x86)%\Intel\IPP\%%i\%AR%\tools\env\ippenv%ARCH_C%.bat" ) if exist %IPPENVF% (set IPPENV=%IPPENVF% & goto begin) @call :WRN "Default IPP %IPPVER% environment for %AR% is not found." exit /b 1 :begin @echo +++ Default Intel(R) IPP %IPPVER% environment is found at %IPPENV% @call %IPPENV% goto :eof :ERR @echo --- @echo --- ERROR: %~1 @echo --- exit /b -1 :WRN @echo *** @echo *** WARNING: %~1 @echo *** exit /b -1
d) 修改 search_compilers.bat,路徑 ipp-samples\tools\env\
@echo off
rem
rem INTEL CORPORATION PROPRIETARY INFORMATION
rem This software is supplied under the terms of a license agreement or
rem nondisclosure agreement with Intel Corporation and may not be copied
rem or disclosed except in accordance with the terms of that agreement.
rem Copyright(c) 2007-2008 Intel Corporation. All Rights Reserved.
rem
set _WIN32_WINNT=0x0501
@if "%ARG%"=="" goto waterfall
if "%COMP_TYPE%" == "fortran" (
if not "%ARG%" == "ifort110" if not "%ARG%" == "ifort101" if not "%ARG%" == "ifort10" if not "%ARG%" == "ifort9" (
set ARG=
goto waterfall
)
)
@if "%ARG%"=="ifort110" @CALL :SET_INTEL_ENV_PRO 11.0
@if "%ARG%"=="ifort101" @CALL :SET_INTEL_FOR_ENV 10.1
@if "%ARG%"=="ifort10" @CALL :SET_INTEL_FOR_ENV 10.0
@if "%ARG%"=="ifort9" @CALL :SET_INTEL_FOR_ENV 9.1
@if "%ARG%"=="icl110" @CALL :SET_INTEL_ENV_PRO 11.0
@if "%ARG%"=="icl101" @CALL :SET_INTEL_ENV 10.1
@if "%ARG%"=="icl10" @CALL :SET_INTEL_ENV 10.0
@if "%ARG%"=="icl91" @CALL :SET_INTEL_ENV 9.1
@if "%ARG%"=="cl10" @CALL :SET_VS10_ENV %vsdk_opt%
@if "%ARG%"=="cl9" @CALL :SET_VS9_ENV %vsdk_opt%
@if "%ARG%"=="cl8" @CALL :SET_VS8_ENV %vsdk_opt%
@if "%ARG%"=="cl7" @CALL :SET_VS7_ENV %sdk_opt%
@if "%ARG%"=="clarm" @CALL :SET_WCE500_TOOLS
@if "%ARG%"=="ecl" @CALL :SET_WCE500_TOOLS
@if "%ARG%"=="ipc2009" @CALL :SET_INTEL_PC 2009
@if defined TOOL (set COMP=%ARG%&goto:eof)
@CALL :ERR "Compiler "%ARG%" environment is not found"
goto:eof
:waterfall
if "%COMP_TYPE%" == "fortran" (
@CALL :SET_INTEL_ENV_PRO 11.0
@if not defined TOOL @CALL :SET_INTEL_FOR_ENV 10.1
@if not defined TOOL @CALL :SET_INTEL_FOR_ENV 10.0
@if not defined TOOL @CALL :SET_INTEL_FOR_ENV 9.1
@if not defined TOOL @CALL :ERR "Intel Fortran environment not found"
goto:eof
)
@if not defined TOOL (
set COMP=icl110
@CALL :SET_INTEL_ENV_PRO 11.0
)
@if not defined TOOL (
set COMP=icl101
@CALL :SET_INTEL_ENV 10.1
)
@if not defined TOOL (
set COMP=icl10
@CALL :SET_INTEL_ENV 10.0
)
@if not defined TOOL (
set COMP=icl91
@CALL :SET_INTEL_ENV 9.1
)
@if not defined TOOL (
set COMP=cl10
@CALL :SET_VS10_ENV %sdk_opt%
)
@if not defined TOOL (
set COMP=cl9
@CALL :SET_VS9_ENV %sdk_opt%
)
@if not defined TOOL (
set COMP=cl8
@CALL :SET_VS8_ENV %vsdk_opt%
)
@if not defined TOOL (
set COMP=cl7
@CALL :SET_VS7_ENV %sdk_opt%
)
@if defined TOOL goto:eof
@CALL :ERR "No any valid compiler environment found"
goto:eof
::::::::::::::::::::::::
:SET_INTEL_ENV_PRO
set COMPILER=icl.exe
if "%COMP_TYPE%" == "fortran" set COMPILER=ifort.exe
set ptn= dir /B /ON "%ProComp%\Intel\Compiler\%1\*"
@%ptn% 2>NUL 1>&2
if "%errorlevel%"=="0" for /F "usebackq" %%i in (`%ptn%`) do set LASTVERSION=%%i
set ENV="%ProComp%\Intel\Compiler\%1\%LASTVERSION%\cpp\bin\iclvars.bat"
if "%COMP_TYPE%" == "fortran" set ENV="%ProComp%\Intel\Compiler\%1\%LASTVERSION%\fortran\bin\ifortvars.bat"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Intel Pro Compiler v.%LASTVERSION% for %AR% is taken
exit /b
)
echo --- Intel Pro Compiler %ARG% for %AR% environment is not found.
exit /b 1
::::::::::::::::::::::::
:SET_INTEL_ENV
set COMPILER=icl.exe
set ptn= dir /B /ON "%PrF%\Intel\Compiler\C++\%1.*"
@%ptn% 2>NUL 1>&2
if "%errorlevel%"=="0" for /F "usebackq" %%i in (`%ptn%`) do set LASTVERSION=%%i
set ENV="%PrF%\Intel\Compiler\C++\%LASTVERSION%\%AR%\Bin\iclvars.bat"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Intel C++ Compiler v.%LASTVERSION% for %AR% is taken
exit /b
)
echo --- Intel C++ Compiler %ARG% for %AR% environment is not found.
exit /b 1
::::::::::::::::::::::::
:SET_INTEL_PC
set COMPILER=icl.exe
set ENV="%PrF%\Intel\Parallel Studio\Composer\bin\iclvars.bat"
if not exist %ENV% set ENV="%PrF%\Intel\Composer\%1\bin\iclvars.bat"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Intel Composer %1 for %AR% is taken
exit /b
)
echo --- Intel Composer %1 for %AR% environment is not found.
exit /b 1
:::::::::::::::::::::::::
:SET_VS10_ENV
set COMPILER=cl.exe
set _WIN32_WINNT=0x0502
set ENV="%VS100COMNTOOLS%\..\..\vc\bin\%MSAR%"
@echo ENV is %ENV%
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Microsoft Visual Studio 2010 compiler for %AR% is taken
exit /b
)
set ENV="%ProgramFiles%\Microsoft SDKs\windows\v6.0\bin\setenv.cmd"
if defined ProgramW6432 set ENV="%ProgramW6432%\Microsoft SDKs\windows\v6.0\bin\setenv.cmd"
if exist %ENV% (
@echo +++ Microsoft Vista SDK v6.0 is taken
set VistaSDK=yes
set TOOL=%ENV% %~1
exit /b
)
echo --- Microsoft Visual Studio 2010 environment is not found.
exit /b 1
:::::::::::::::::::::::::
:SET_VS9_ENV
set COMPILER=cl.exe
set _WIN32_WINNT=0x0502
set ENV="%VS90COMNTOOLS%\..\..\vc\bin\%MSAR%"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Microsoft Visual Studio 2008 compiler for %AR% is taken
exit /b
)
set ENV="%ProgramFiles%\Microsoft SDKs\windows\v6.0\bin\setenv.cmd"
if defined ProgramW6432 set ENV="%ProgramW6432%\Microsoft SDKs\windows\v6.0\bin\setenv.cmd"
if exist %ENV% (
@echo +++ Microsoft Vista SDK v6.0 is taken
set VistaSDK=yes
set TOOL=%ENV% %~1
exit /b
)
echo --- Microsoft Visual Studio 2008 environment is not found.
exit /b 1
:SET_VS8_ENV
set COMPILER=cl.exe
set ENV="%VS80COMNTOOLS%\..\..\vc\bin\%MSAR%"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Microsoft Visual Studio 2005 compiler for %AR% is taken
exit /b
)
set ENV="%ProgramFiles%\Microsoft SDKs\windows\v6.0\bin\setenv.cmd"
if defined ProgramW6432 set ENV="%ProgramW6432%\Microsoft SDKs\windows\v6.0\bin\setenv.cmd"
if exist %ENV% (
@echo +++ Microsoft Vista SDK v6.0 is taken
set VistaSDK=yes
set TOOL=%ENV% %~1
exit /b
)
echo --- Microsoft Visual Studio 2005 environment is not found.
exit /b 1
:SET_VS7_ENV
set COMPILER=cl.exe
if not "%AR%" == "IA32" goto sdk
set ENV="%VS71COMNTOOLS%\vsvars32.bat"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Microsoft Visual Studio 2003 compiler is taken
exit /b
)
echo --- Microsoft Visual Studio 2003 environment is not found.
exit /b 1
:sdk
set ENV="%ProgramFiles%\Microsoft Platform SDK for Windows Server 2003 R2\setenv.cmd"
if exist %ENV% (
@echo +++ Microsoft Platform SDK for Windows Server 2003 R2 is taken
set TOOL=%ENV% %~1
exit /b
)
set ENV="%ProgramFiles%\Microsoft Platform SDK\setenv.cmd"
if exist %ENV% (
@echo +++ Microsoft Platform SDK is taken
set TOOL=%ENV% %~1
exit /b
)
set ENV="%ProgramFiles%\Microsoft Platform SDK\setenv.bat"
if exist %ENV% (
@echo +++ Microsoft Platform SDK is taken
set TOOL=%ENV% %~1
exit /b
)
@echo --- MS Platform SDK is not found.
exit /b 1
::::::::::::::::::::::::
:SET_INTEL_FOR_ENV
set COMPILER=ifort.exe
set ptn= dir /B /ON "%PrF%\Intel\Compiler\fortran\%1.*"
@%ptn% 2>NUL 1>&2
if "%errorlevel%"=="0" for /F "usebackq" %%i in (`%ptn%`) do set LASTVERSION=%%i
set ENV="%PrF%\Intel\Compiler\fortran\%LASTVERSION%\%AR%\Bin\ifortvars.bat"
if exist %ENV% (
set TOOL=%ENV%
@echo +++ Intel Fortran Compiler v.%LASTVERSION% for %AR% is taken
set COMP=f%LASTVERSION%
exit /b
)
echo --- Intel Fortran Compiler %ARG% for %AR% environment is not found.
exit /b 1
:SET_WCE500_TOOLS
set COMPILER=%ARG%
if exist %SDKROOT% goto pass_SDKROOT_SET
set __SDK_TOUCH="C:\Program Files\Windows CE Tools\wce500\"
if exist %__SDK_TOUCH% set SDKROOT=C:\Program Files\Windows CE Tools
:pass_SDKROOT_SET
set TOOL="%ProgramFiles%\Microsoft eMbedded C++ 4.0\EVC\wce500\bin\WCEARMV4I.BAT"
if "%ARG%"=="ecl" (
set TOOL="%ProgramFiles%\Microsoft eMbedded C++ 4.0\EVC\wce500\bin\WCEx86.BAT"
set COMPILER=cl
)
@echo +++ Microsoft eMbedded C++ 4.0 for %AR% is taken
exit /b
:::::::::::::::::::::::
:ERR
@echo ---
@echo --- ERROR: %~1
@echo ---
exit /b -1
上述修改完成後,可以在路徑 ipp-samples\image-codecs\jpeg-ijl\ 下執行 buildem64t.bat,即可產生lib、dll檔案。
------------------------------------------------------------------------------------
Ipp 6.0安裝包,包括了ia32, em64t 以及 itanium。
而 ijl 2.0 (intel jpeg library) 則放在了sample中給出, 如果需要自己編譯 ijl2.0, 則需要下載w_ipp-samples_p_6.0.0.130.zip, 解壓縮後,在ipp-samples/image-codecs/jpeg-ijl/ 下可見 build32.bat
直接執行,可以編譯生成 win32 (x86) 所需的 ijl20l.lib (靜態連結所需庫檔案) 以及 ijl20.lib (動態連結所需庫檔案)
這裡,需要介紹的是如何產生 win64 (x64) 所需的 ijl20l.lib 以及 ijl20.lib
參考其他目錄下的編譯檔案,我們發現,編譯檔案 build32.bat 包括了各種編譯器以及各種系統的情況, 所以無需修改此bat檔案, 只需要修改與他在同一目錄下的 win32.ini.
win32.ini:
#!INCLUDE <win32.mak>
LIB_ARCH =
LINK_ARCH = I386
而win64(x64),只需將其修改為 winem64t.ini
winem64t.ini:
#!INCLUDE <win32.mak>
LIB_ARCH = em64t
LINK_ARCH = AMD64
同時將 build32.bat 拷貝並重命名為 buildem64t.bat:
點選執行buildem64t.bat即可。
產生的lib 檔案在 ipp-samples/image-codecs/jpeg-ijl/lib/ 目錄下對應編譯器型別的資料夾內