當前位置:首頁 » 編程軟體 » zlibvs編譯

zlibvs編譯

發布時間: 2023-08-10 03:50:36

『壹』 使用nmake編譯Gdal源代碼(Win10+VS2022)

為了編譯Gdal-master的源碼,需要PROJ的支持,而PROJ又需要SQLite的支持。

SQLite、PROJ、Gdal-master的源碼及編譯可參見網頁:

https://www.toutiao.com/a7063703225425199623/?log_from=fe233e3892be3_1644664643652

也可使用nmake在命令行創建(參考網頁 https://trac.osgeo.org/gdal/wiki/BuildingOnWindows

使用命令行,進入VS2022開發者命令行窗口

cd D:ProgramsMicrosoft Visual

D:

vcvars64.bat


cd D:SourceCodesgdal-master

set BINDIR=d:programsgdalgdal-bin

set DATADIR=d:programsgdalgdal-data

set INCDIR=d:programsgdalgdal-include

set LIBDIR=d:programsgdalgdal-lib

修改文件「nmake.opt」的內容:

(1)將

#PROJ_INCLUDE = -Id:install-projlocalinclude

改為

PROJ_INCLUDE = -ID:My3rdPartyinclude

(2)將

#PROJ_LIBRARY = d:install-projlocallibproj_6_0.lib shell32.lib ole32.lib

改為

PROJ_LIBRARY = D:My3rdPartylibproj.lib shell32.lib ole32.lib

依次使用下列命令, 創建x64的Release版本

nmake -f makefile.vc MSVC_VER=1930 WIN64=1

nmake /f makefile.vc install MSVC_VER=1930 WIN64=yes

nmake /f makefile.vc devinstall MSVC_VER=1930 WIN64=yes

執行完畢後,目錄「d:programsgdal」中的內容如下(使用命令 「tree /f d:programsgdal」 列出)

D:PROGRAMSGDAL

gdal-bin

gdal303.dll

gdaladdo.exe

gdalbuildvrt.exe

gdaldem.exe

gdalenhance.exe

gdalinfo.exe

gdallocationinfo.exe

gdalmanage.exe

gdalmdiminfo.exe

gdalmdimtranslate.exe

gdalsrsinfo.exe

gdaltindex.exe

gdaltransform.exe

gdalwarp.exe

gdal_contour.exe

gdal_create.exe

gdal_grid.exe

gdal_rasterize.exe

gdal_translate.exe

gdal_viewshed.exe

gnmanalyse.exe

gnmmanage.exe

nearblack.exe

ogr2ogr.exe

ogrinfo.exe

ogrlineref.exe

ogrtindex.exe

gdalplugins

drivers.ini

gdal-data

bag_template.xml

cubewerx_extra.wkt

default.rsc

ecw_cs.wkt

eedaconf.json

epsg.wkt

esri_StatePlane_extra.wkt

gdalicon.png

GDALLogoBW.svg

GDALLogoColor.svg

GDALLogoGS.svg

gdalmdiminfo_output.schema.json

gdalvrt.xsd

gmlasconf.xml

gmlasconf.xsd

gml_registry.xml

grib2_center.csv

grib2_process.csv

grib2_subcenter.csv

grib2_table_4_2_0_0.csv

grib2_table_4_2_0_1.csv

grib2_table_4_2_0_13.csv

grib2_table_4_2_0_14.csv

grib2_table_4_2_0_15.csv

grib2_table_4_2_0_16.csv

grib2_table_4_2_0_17.csv

grib2_table_4_2_0_18.csv

grib2_table_4_2_0_19.csv

grib2_table_4_2_0_190.csv

grib2_table_4_2_0_191.csv

grib2_table_4_2_0_2.csv

grib2_table_4_2_0_20.csv

grib2_table_4_2_0_3.csv

grib2_table_4_2_0_4.csv

grib2_table_4_2_0_5.csv

grib2_table_4_2_0_6.csv

grib2_table_4_2_0_7.csv

grib2_table_4_2_10_0.csv

grib2_table_4_2_10_1.csv

grib2_table_4_2_10_191.csv

grib2_table_4_2_10_2.csv

grib2_table_4_2_10_3.csv

grib2_table_4_2_10_4.csv

grib2_table_4_2_1_0.csv

grib2_table_4_2_1_1.csv

grib2_table_4_2_1_2.csv

grib2_table_4_2_20_0.csv

grib2_table_4_2_20_1.csv

grib2_table_4_2_20_2.csv

grib2_table_4_2_2_0.csv

grib2_table_4_2_2_3.csv

grib2_table_4_2_2_4.csv

grib2_table_4_2_2_5.csv

grib2_table_4_2_3_0.csv

grib2_table_4_2_3_1.csv

grib2_table_4_2_3_2.csv

grib2_table_4_2_3_3.csv

grib2_table_4_2_3_4.csv

grib2_table_4_2_3_5.csv

grib2_table_4_2_3_6.csv

grib2_table_4_2_4_0.csv

grib2_table_4_2_4_1.csv

grib2_table_4_2_4_10.csv

grib2_table_4_2_4_2.csv

grib2_table_4_2_4_3.csv

grib2_table_4_2_4_4.csv

grib2_table_4_2_4_5.csv

grib2_table_4_2_4_6.csv

grib2_table_4_2_4_7.csv

grib2_table_4_2_4_8.csv

grib2_table_4_2_4_9.csv

grib2_table_4_2_local_Canada.csv

grib2_table_4_2_local_HPC.csv

grib2_table_4_2_local_index.csv

grib2_table_4_2_local_MRMS.csv

grib2_table_4_2_local_NCEP.csv

grib2_table_4_2_local_NDFD.csv

grib2_table_4_5.csv

grib2_table_versions.csv

gt_datum.csv

gt_ellips.csv

header.dxf

inspire_cp_BasicPropertyUnit.gfs

inspire_cp_CadastralBoundary.gfs

inspire_cp_CadastralParcel.gfs

inspire_cp_CadastralZoning.gfs

jpfgdgml_AdmArea.gfs

jpfgdgml_AdmBdry.gfs

jpfgdgml_AdmPt.gfs

jpfgdgml_BldA.gfs

jpfgdgml_BldL.gfs

jpfgdgml_Cntr.gfs

jpfgdgml_CommBdry.gfs

jpfgdgml_CommPt.gfs

jpfgdgml_Cstline.gfs

jpfgdgml_ElevPt.gfs

jpfgdgml_GCP.gfs

jpfgdgml_LeveeEdge.gfs

jpfgdgml_RailCL.gfs

jpfgdgml_RdArea.gfs

jpfgdgml_RdASL.gfs

jpfgdgml_RdCompt.gfs

jpfgdgml_RdEdg.gfs

jpfgdgml_RdMgtBdry.gfs

jpfgdgml_RdSgmtA.gfs

jpfgdgml_RvrMgtBdry.gfs

jpfgdgml_SBAPt.gfs

jpfgdgml_SBArea.gfs

jpfgdgml_SBBdry.gfs

jpfgdgml_WA.gfs

jpfgdgml_WL.gfs

jpfgdgml_WStrA.gfs

jpfgdgml_WStrL.gfs

LICENSE.TXT

netcdf_config.xsd

nitf_spec.xml

nitf_spec.xsd

ogrvrt.xsd

osmconf.ini

ozi_datum.csv

ozi_ellips.csv

pci_datum.txt

pci_ellips.txt

pdfcomposition.xsd

pds4_template.xml

plscenesconf.json

ruian_vf_ob_v1.gfs

ruian_vf_st_uvoh_v1.gfs

ruian_vf_st_v1.gfs

ruian_vf_v1.gfs

s57agencies.csv

s57attributes.csv

s57expectedinput.csv

s57objectclasses.csv

seed_2d.dgn

seed_3d.dgn

stateplane.csv

template_tiles.mapml

tms_LINZAntarticaMapTileGrid.json

tms_MapML_APSTILE.json

tms_MapML_CBMTILE.json

tms_NZTM2000.json

trailer.dxf

vdv452.xml

vdv452.xsd

vicar.json

gdal-include

armadillo_headers.h

cplkeywordparser.h

cpl_alibaba_oss.h

cpl_atomic_ops.h

cpl_auto_close.h

cpl_aws.h

cpl_azure.h

cpl_compressor.h

cpl_config.h

cpl_config_extras.h

cpl_conv.h

cpl_cpu_features.h

cpl_csv.h

cpl_curl_priv.h

cpl_error.h

cpl_error_internal.h

cpl_float.h

cpl_google_cloud.h

cpl_hash_set.h

cpl_http.h

cpl_json.h

cpl_json_header.h

cpl_json_streaming_parser.h

cpl_json_streaming_writer.h

cpl_list.h

cpl_md5.h

cpl_mem_cache.h

cpl_minixml.h

cpl_minizip_ioapi.h

cpl_minizip_unzip.h

cpl_minizip_zip.h

cpl_multiproc.h

cpl_odbc.h

cpl_port.h

cpl_progress.h

cpl_quad_tree.h

cpl_sha1.h

cpl_sha256.h

cpl_spawn.h

cpl_string.h

cpl_swift.h

cpl_time.h

cpl_userfaultfd.h

cpl_vax.h

cpl_virtualmem.h

cpl_vsi.h

cpl_vsil_curl_class.h

cpl_vsil_curl_priv.h

cpl_vsil_plugin.h

cpl_vsi_error.h

cpl_vsi_virtual.h

cpl_worker_thread_pool.h

cpl_zlib_header.h

gdal.h

gdalexif.h

gdalgeorefpamdataset.h

gdalgrid.h

gdalgrid_priv.h

gdaljp2abstractdataset.h

gdaljp2metadata.h

gdaljp2metadatagenerator.h

gdallinearsystem.h

gdalpansharpen.h

gdalpython.h

gdalsse_priv.h

gdalwarper.h

gdalwarpkernel_opencl.h

gdal_alg.h

gdal_alg_priv.h

gdal_csv.h

gdal_frmts.h

gdal_mdreader.h

gdal_pam.h

gdal_priv.h

gdal_proxy.h

gdal_rat.h

gdal_simplesurf.h

gdal_thread_pool.h

gdal_utils.h

gdal_version.h

gdal_vrt.h

gnm.h

gnmgraph.h

gnm_api.h

gvgcpfit.h

internal_qhull_headers.h

memdataset.h

nasakeywordhandler.h

ograpispy.h

ogrgeomediageometry.h

ogrpgeogeometry.h

ogrsf_frmts.h

ogr_api.h

ogr_attrind.h

ogr_core.h

ogr_expat.h

ogr_feature.h

ogr_featurestyle.h

ogr_geocoding.h

ogr_geometry.h

ogr_geos.h

ogr_geo_utils.h

ogr_libs.h

ogr_p.h

ogr_proj_p.h

ogr_sfcgal.h

ogr_spatialref.h

ogr_srs_api.h

ogr_srs_esri_names.h

ogr_swq.h

ogr_xerces.h

ogr_xerces_headers.h

rawdataset.h

thinplatespline.h

vrtdataset.h

gdal-lib

gdal_i.lib

『貳』 win10 64vs怎麼編譯 libpng

1. 先下載 libpng(http://sourceforge.net/projects/libpng/files/)和libz(http://zlib.net/zlib-1.2.7.tar.gz),將libpng解壓,如C:\workspace\libpng\。
2. 將libz解壓,改名zlib放到libpng同級目錄,如C:\workspace\zlib。
3. 進入libpng\projects\visualc71\,用visual studio打開工程文件,方案中會有三個子工程:libpng, pngtest, zlib。直接編譯,不出意外會在Win32_DLL_Debug目錄下和Win32_DLL_Debug\ZLib目錄下生成zlib1d.dll, libpng15d.dll, libpng.lib和zlib.lib等庫文件。
4.若報錯,拷貝scripts/pnglibconf.h.prebuilt到源碼目錄,改名為pnglibconf.h

對於要用到這兩個庫的工程,主要需要做三件事:
1. C/C++常規->附加包含目錄中把包含png.h等頭文件的目錄加進來
2. 鏈接器->輸入->附加依賴項中加zlib.lib;libpng.lib。
3.通用屬性->VC++ 目錄->庫目錄中把放著zlib.lib和libpng.lib的目錄加進來。

『叄』 如何在VS2015中集成QT5.5

1. 首先,我們下載源碼包,加壓源碼包到磁碟。
2. 由於編譯QtWekbit需要ICU andANGLE 庫,ICU庫需要單獨下載和編譯,下載ICU4Cversion 56.1並解壓到磁碟,目錄位置參見隨後說明。
3. 在Qt 5.5.1的源碼包中還存在一個BUG,如果直接編譯的話在編譯QT3D模塊的時候會報沒有找到Zlib.h的錯誤而中斷編譯,所以參照如下提示修改qt-everywhere-opensource-src-5.5.1\qt3d\src\3rdparty\assimp目錄下的assimp.pri文件。可參考地址codereview.qt-project.org/...mp.pri。

4. 在編譯QT5.5.1之前還需要安裝配置一下的工具和環境:
5. 經過上面的步驟可以開始進行編譯ICU4C version 56.1和QT5.5.1的源碼了
6. 如果以上的配置都正確的話開機讓機器編譯幾個小時後就可以在目標路徑下生成QT5.5.1的運行文件。

『肆』 怎麼編譯windows 64位版本的libav

libav是ffmpeg的一個分支,我純粹是出於喜歡avconv和avprobe這樣清晰的命名才對它有好感。
因為官方網站有一個編譯指南,以下只是本人在實際編譯過程中的一些問題點的記錄。

編譯環境准備
因為libav使用configure腳本來編譯,所以必須要安裝mingw的msys,這樣可以有一個bash來運行configure腳本,以及保證一個可用的gnu make來執行編譯。現在安裝Mingw可以使用mingw-get,類似於一個包管理器,我們只需要msys的包和coreutils的ext包就可以了。
其次我使用VS2013 Express版本的msvc來編譯。在之前版本的msvc,只需要安裝Windows SDK那個光碟鏡像就可以有一個命令行的編譯環境了,但是VS2013之後,必須安裝VS2013的光碟鏡像才可以(Express版本足矣)。
另外libav中有匯編代碼,語法是yasm,所以得下載一份windows版本的yasm。

依賴的第三方庫准備
我只准備了zlib和libfdk_aac兩個庫,前者其實我不知道libav哪裡用了,只是看到指南中有提及,就下載了,libfdk_aac據說是目前開源界最好的aac編解碼庫,只是因為用了一個custom的license,所以用它編譯出來的二進制文件是禁止發布的,所以想用支持這個庫的libav只能自己編譯用。

按照指南中的說明來修改編譯zlib即可,非常straight forward,只是要編譯一個x64的zlib.lib有需要注意的地方;cl.exe編譯object file的時候是沒有選項來指定要生成32位還是64位的,相反的,它用不同的cl.exe用來實現這一點,使用vs2013的兩個命令行快捷方式開啟編譯環境命令行即可(也就是給vcvarsall.bat傳遞不同的參數來打開相應的編譯環境命令行,例如我安裝的32位的VS2013 Express,就可以用vcvarsall.bat x86_amd64在PATH中准備好一個本身是32位的但生成的目標文件是64bit的cl.exe)。

libfdk_aac的代碼中沒有為msvc的toolchain來准備任何配置,所以我採用的最笨的方法:在VC中新建一個static library類型的工程,然後把需要的文件全部添加進來(除了aac decoder的部分),並且配置各種細節,來生成最後的64位的fdk-aac.lib文件。

configure libav
然後把zlib的頭文件和libfdk_aac的encoder的頭文件放到3rd/headers,把剛才生成的lib放到3rd/libs。正如指南中說的,msvc的toolchain會使用INCLUDE和LIB兩個環境變數來確定頭文件和庫文件的位置;在打開vcvarsall.bat之後,這兩個變數已經帶了系統庫的設定;而我們需要在./configure和make執行的時候,都要在這兩個變數中加上我們的3rd環境;因為用msys的bash來運行,只需要在這兩個命令前面如此設置即可:
INCLUDE=3rd/headers/;$INCLUDE LIB=3rd/libs/;$LIB ./configure

還有需要刪除mingw的link.exe,避免與msvc中的link.exe沖突,指南中也提到了。

另外附上我的configure參數,因為我的fdk-aac.lib中沒有解碼器,我專門聲明了不使用它的解碼器:

./configure --disable-debug \
--enable-gpl --enable-nonfree \
--enable-runtime-cpudetect \
--disable-avplay --disable-avserver \
--disable-encoder=aac \
--enable-libfdk-aac --disable-decoder=libfdk_aac \
--toolchain=msvc

libav本身的修改和make
libav在windows下,會把通過GetCommandLineW()來獲取UTF-16LE版本的命令行參數,並轉換成UTF-8之後才進行後續的所有操作(libav內部都是用UTF-8來統一對待字元串編碼的);但是在往控制台打log的時候,直接用fputs介面向stderr列印UTF-8的multibyte字元串,在CP_ACP(ANSI codepage)為gbk的中文windows上,字元串中的非ascii字元(例如剛才命令行傳入的中文文件名)就會列印為亂碼(因為系統用GBK來解碼UTF-8的字元串)。
解決方案是:
先用MultiByteToWideChar()把待列印的UTF-8 multibyte字元串轉換回UTF-16LE的wchar_t字元串;
這時候如果用fwputs來列印轉換後的字元串,會發現一遇到非ascii字元就會調用失敗(列印停止),這是因為默認的locale中的LC_TYPE(這個locale category專門控制字元相關的操作的)是"C",用setlocale(LC_TYPE, "")設置為系統默認(中文系統為GBK),或者顯式調用setlocale(LC_TYPE, ".936")設置為GBK,就能成功列印出UTF-16LE中的GBK能表示的字元;
但是這個locale+fwputs的方案只能顯示出一種ANSI方案支持的字元,想顯示出所有UTF-16LE支持的字元,應該直接使用windows的API調用,WriteConsoleW(GetStdHandle(STD_ERROR_HANDLE), wcMsg, wcMsgLen, &wcMsgLen, NULL)。
以下是我對libavutil/log.c的patch:

--- log.c 2014-08-04 10:02:34 +0800
+++ libav-64bit/libav-10.3/libavutil/log.c 2014-09-10 06:42:02 +0800
@@ -59,6 +59,10 @@

static void colored_fputs(int level, const char *str)
{
+#if HAVE_COMMANDLINETOARGVW && defined(_WIN32)
+ int wcBufLen = 0;
+ wchar_t* wcBuf = NULL;
+#endif
if (use_color < 0) {
#if HAVE_SETCONSOLETEXTATTRIBUTE
CONSOLE_SCREEN_BUFFER_INFO con_info;
@@ -83,7 +87,19 @@
if (use_color) {
set_color(level);
}
+#if HAVE_COMMANDLINETOARGVW && defined(_WIN32)
+ wcBufLen = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
+ if (wcBufLen == 0) {
+ fputs("Failed to convert multibyte log string to widechar.\n", stderr);
+ exit(1);
+ }
+ wcBuf = (wchar_t*)malloc(wcBufLen *2);
+ wcBufLen = MultiByteToWideChar(CP_UTF8, 0, str, -1, wcBuf, wcBufLen);
+ WriteConsoleW(GetStdHandle(STD_ERROR_HANDLE), wcBuf, wcBufLen, &wcBufLen, NULL);
+ free((void*)wcBuf);
+#else
fputs(str, stderr);
+#endif
if (use_color) {
reset_color();
}

使用avconv的簡易教程
avprobe xxx.mkv
看清音軌是哪個,也就是一個數字音軌號;其實大部分時候一個容器中的所有音軌都是一種格式的,所以其實也不用看,下面用a指定所有的就好了

avconv -i xxx.mkv -c -c:1 libdfk_aac out.mkv
以上把1號軌按照aac重新編碼,別的軌全部對拷
avconv -i xxx.mkv -c -c:a libdfk_aac out.mkv
以上把所有音軌按照aac重新編碼,別的軌全部對拷
avconv -i xxx.mkv -i xxx.srt -c -c:a libdfk_aac out.mkv
以上演示另外附加一個srt,注意所有的-c參數都要放在所有-i文件之後

如何去掉輸入文件中的某些軌呢(需要借鑒avprobe xxx.mkv的輸出了):
avconv -i xxx.mkv -c -c:a libdfk_aac -map 0 out.mkv
以上語句實現功能跟不加-map 0一樣,map 0是說把第0號輸入文件中的所有軌都輸入到out.mkv
avconv -i xxx.mkv -c -c:a libdfk_aac -map 0:v out.mkv
以上語句講只輸出視頻軌
avconv -i xxx.mkv -c -c:a libdfk_aac -map 0:v -map 0:1 -map 0:s out.mkv
如果輸入文件中0為視頻,1和2均為音頻軌,3和4為字幕軌,以上語句可以只輸出0 1 3軌,不輸出2號音頻軌
avconv -i xxx.mkv -c -c:a libdfk_aac -map 0:0 -map 0:1 -map 0:3 -map 0:4 out.mkv
以上功能相同,只是完全用軌的數字序號來表示
avconv -i xxx.mkv -c -c:a libdfk_aac -map 0 -map -0:2 out.mkv
以上功能相同,只是用「負」來表示從之前形成的map中去掉指定的軌
注意map選項用在輸出之前,所有-i之後
某些文件(例如avi)在remux到mkv的時候會報錯,給avconv加上-fflags +genpts一般能解決

熱點內容
表格式腳本寫作 發布:2025-03-19 14:58:52 瀏覽:720
解壓蜜蜂 發布:2025-03-19 14:58:02 瀏覽:249
百家站源碼 發布:2025-03-19 14:56:47 瀏覽:474
安卓和unity哪個累 發布:2025-03-19 14:31:39 瀏覽:677
雅閣電動座椅怎麼配置 發布:2025-03-19 14:28:30 瀏覽:635
探月編程課 發布:2025-03-19 14:22:34 瀏覽:311
62腳本怎麼安裝 發布:2025-03-19 14:04:25 瀏覽:573
php傳值給html 發布:2025-03-19 14:02:05 瀏覽:608
windowsmedia緩存 發布:2025-03-19 14:02:00 瀏覽:765
百變圖標安卓為什麼有2個應用 發布:2025-03-19 14:00:28 瀏覽:52