libpng-1.6.47-windows編譯

????????本文操作按照《c&c++開源庫編譯指南》中內容規范編寫,編譯環境配置、工具下載、目錄規劃,及更多其他開源庫編譯方法請參考該文章。

????????c&c++開源庫編譯指南:https://blog.csdn.net/binary0006/article/details/144086155

????????本文章中的源代碼已提交到gitee倉庫,地址:https://gitee.com/binary0010/depends/tree/master/c/libpng-1.6.47

1.libpng編譯

1.1.源代碼下載

????????源代碼下載地址:https://sourceforge.net/projects/libpng/files/libpng16/1.6.47/,直接下載最新版1.6.47版本,點擊下圖所示鏈接直接下載即可。

????????也可以自己復制這個地址下載:https://sourceforge.net/projects/libpng/files/libpng16/1.6.47/libpng-1.6.47.tar.xz/download?

1.2.windows編譯

????????先解壓源代碼到指定目錄,libpng源代碼中已經提供了CMakeList.txt腳本,這里我們按照規范會對該腳本進行修改。

1.2.1.vs2008構建錯誤處理-mspdb80.dll錯誤?

????????在實踐VS2008使用CMake構建時,會彈出下面錯誤提示框,分析是libpng在CMake腳本中的定義項目是使用了ASM語言支持。

????????一路狂點確定之后好像也沒有什么影響,需要解決的話我們把mspdb80.dll、msobj80.dll、mspdbcore.dll、mspdbsrv.exe拷貝一份到cl.exe所在目錄即可,注意一定要拷貝上面4個文件,否則在編譯時會遇到錯誤。

????????下面有截圖給出了拷貝路徑。

?1.2.2.修改CMake腳本

????????修改CMake腳本按照我們的設計的編譯規范來進行構建和編譯,修改源代碼根目錄下的CMakeLists.txt即可。

????????腳本涉及的內容主要是使用自定義的FindZLIB.cmake腳本來查找依賴庫,以及mt工程的鏈接庫設置。由于腳本內容太多,這里就不粘貼全部代碼,僅截圖展示修改部分的內容,完整的編譯腳本,可以直接從文章開頭的gitee倉庫獲取。

????????CMakeLists.txt修改內容:?

1.2.3.vs2008編譯?

????????前面我們已經把CMakeLists.txt腳本按照規范修改完畢,下面我們將使用cmake來構建vs2008的工程和編譯。

1.2.3.1.cmake構建目錄設置

????????選擇源代碼根目錄(CMakeLists.txt文件在這個目錄),設置build目錄為源代碼根目錄下的cmake-vs2008絕對路徑為D:/x-app/depends/c/libpng-1.6.47/cmake-vs2008,保證源代碼目錄干凈,會生成工程和臨時文件,同時也方便后續有其他的構建工具擴展管理。

1.2.3.2.應用CMake配置

????????點擊“Configure”會彈出編譯器選擇對話框,這里選擇“Visual Studio 9 2008”點擊“Finish”按鈕等待配置參數完成。?

1.2.3.3.去掉不需要的編譯選項

????????因為前面CMakLists.txt腳本被我們修改了,所以這里一定要去掉下面截圖所示的4個選項,否則構建時CMake會報錯。

1.2.3.4.生成vs解決方案

????????下面的紅色警告忽略不用管,意思是未來的cmake版本不再支持生成vs2008的解決方案。?

?1.2.3.5.編譯工程

????????使用vs2008打開“libpng.sln”解決方案文件,分別編譯Debug和RelWithDebInfo配置。

?1.2.3.6.安裝庫文件、頭文件

????????編譯Install工程的Debug和RelWithDebInfo配置,.h文件和編譯生成.dll、.lib、pdb文件會拷貝CMakeList.txt中設置的路徑下。

????????至此通過一個CMakeLists配置文件將windows下vs2008常用編譯類型的庫全部編譯出來了,最終庫的對應關系如下。

庫類型

運行庫類型

庫文件

動態庫

mdd

libpng16dlld.dll、libpng16dlld.lib

md

libpng16dll.dll、libpng16dll.lib

mtd

libpng16dllmtd.dll、libpng16dllmtd.lib

mt

libpng16dllmt.dll、libpng16dllmt.lib

靜態庫

mdd

libpng16libd.lib

md

libpng16lib.lib

mtd

libpng16libmtd.lib

mt

libpng16libmt.lib

1.2.4.vs2015編譯

????????vs2015編譯與vs2008相同的,只需要在CMake生成工程時選擇vs2015即可,其他版本的vs也是一樣的,選擇需要使用的vs版本即可,此處只演示一下vs2015的編譯。

????????因為前面生成過vs2008的工程,需要將build目錄設置成cmake-vs2015,再“Configure”選擇vs2015即可,其他操作就是一樣的了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73597.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[250324] Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft!| Wine 10.4 發布!

目錄 Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft!Wine 10.4 發布! Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft! 近日,Apache Kafka 4.0.0 正式發布!這是一個…

linux安裝配置Nacos

環境:centos7、mysql8.0、nacos2.5.1 1.下載Nacos安裝包 https://github.com/alibaba/nacos/releases?spm5238cd80.72a042d5.0.0.46bacd36C42EfG 我這邊選的是最新的穩定版本2.5.1 2. 放到 linux 服務器中解壓安裝 解壓 tar -xvf nacos-server-2.5.1.tar.gz 進入…

元宇宙浪潮下,數字孿生如何“乘風破浪”?

在當今科技飛速發展的時代,元宇宙的概念如同一顆璀璨的新星,吸引了全球的目光。元宇宙被描繪為一個平行于現實世界、又與現實世界相互影響且始終在線的虛擬空間,它整合了多種前沿技術,為人們帶來沉浸式的交互體驗。而數字孿生&…

[Effective C++]條款24:若所有參數皆需類型轉換,請為此采用non-menber函數

. 1、操作符重載&隱式類型轉換 C中,操作符重載可以通過成員函數或非成員函數來實現。當操作符重載是成員函數時,左操作數必須是該類的對象。如果左操作數不是該類的對象,而是需要進行隱式轉換的類型,編譯器將無法找到匹配的成…

C++———— Vector

一、vector的介紹及使用 1.1 vector的介紹 1.2 vector 的使用 1.21 vector的定義 演示: 1.22 vector iterator 的使用 1.beginend 主要作用:獲取第一個數據位置的迭代器和最后一個數據的下一個位置的迭代器。 演示: 2.rbeginrend 主要…

STL入門

STL入門 作者:blue 時間:2024.3 文章目錄 STL入門0.概述1.pair2.set(集合)3.vector4.string字符串類型5.queue,deque,priority_queue6.list的用法 0.概述 本文討論部分常用的STL的運用 1.pair pair是將2個數據組合成一組數據…

洛谷 P10463 Interval GCD Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?),有 m m m 個操作分兩種: add ? ( l , r , k ) \operatorname{add}(l,r,k) add(l,r,k):對每個 i ∈ [ l , r ] i\in[l,r] i∈[l,r] 執行 …

從聲源定位(DOA)算法仿真到工程源碼實現-第八節

一、概述 本節我們記錄在respeaker core v2 開發板上部署一個完整的聲源定位(DOA)系統,演示可以看第一節中的視頻。整個模塊可以分為三部分,第一部分為控制開發板上的LED燈顯示,這樣可以實時的測試算法的效果;第二部分為從ALSA上取…

在linux部署網站

在Linux部署網站,需要準備一個純凈的系統 一、系統環境準備 1.設置靜態IP地址 ? 2.關閉默認防火墻 systemctl disable firewalld --now ? 3.配置SSH密鑰登錄 4.yum update -y && reboot # 更新系統內核 5.yum install -y wget curl unzip # 安裝…

Java后端API限流秘籍:高并發的防護傘與實戰指南

目錄導航 ?? ??? 為什么需要API限流??? 主流限流算法大解析????? 阿里巴巴的限流實踐?? 四大黃金定律?? 限流策略組合拳?? 限流場景實戰?? 技術實現方案?? 最佳實踐分享?? 結語與展望?? 推薦閱讀 1. ??? 為什么需要API限流? 在高并發環境中,未…

OpenGL ES 2.0與OpenGL ES 3.1的區別

如果硬件支持且需要更高質量的圖形效果,推薦3.1;如果兼容性和開發簡便更重要,且效果需求不高,2.0更合適。不過現代車載系統可能越來越多支持3.x版本,所以可能傾向于使用3.1,但具體情況還需調查目標平臺的硬…

k8s存儲介紹(五)PV與PVC

在 Kubernetes(k8s)中,持久化存儲(Persistent Storage)是一個非常重要的概念,因為 Pod 本身是無狀態的,重啟后會丟失數據。為了支持有狀態應用,Kubernetes 提供了持久化存儲的機制&a…

ORA-00600 [2662]

一、數據庫啟動報ORA-00600[2662] [oraclenode1 ora11g]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 22 14:37:00 2011Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to an idle instance.SQL> startup ORACLE instanc…

WebSocket接入SSL證書

目錄 碎碎念解決方法創建 HTTPS WebSocket 服務器創建系統服務啟動服務 碎碎念 在訪問網站時,使用 HTTPS 非常重要。HTTPS 協議不僅可以確保數據傳輸的安全性,還可以防止中間人攻擊和數據篡改等安全問題。任何沒有 SSL 證書的內容都可能會被拒絕訪問。因…

c#在work線程中怎樣更新UI控件

最近筆者調試修改項目,碰到了c#在work線程中怎樣更新UI控件中的場景,簡單總結了下,主要有兩個方法: 方法1:通過System.Windows.Application.Current.Dispatcher.Invoke來更新UI控件 System.Windows.Application.Curre…

?數據結構每日一題day3(順序表)★★★★★

題目描述:順序表L的元素遞增有序排列,設計一個算法在插入元素x后保持該順序表仍然遞增有序排列,插入成功后返回插入元素所在位置,不成功返回-1 算法思想:在遞增有序的順序表中插入元素 x 并保持有序性,步驟如下: 合法…

MyBatis中mapper.xml 的sql映射規則

一、SQL 映射文件核心元素 MyBatis 映射文件的頂級元素(按定義順序): cache:命名空間的緩存配置。cache-ref:引用其他命名空間的緩存。resultMap:自定義結果集映射。sql:可重用的 SQL 片段。i…

【計算機網絡】計算機網絡協議、接口與服務全面解析——結合生活化案例與圖文詳解

協議、接口與服務 導讀一、協議1.1 定義1.2 組成 二、接口三、服務3.1 定義3.2 服務與協議的區別3.3 分類3.3.1 面向連接服務于無連接服務3.3.2 可靠服務和不可靠服務3.3.3 有應答服務和無應答服務 結語 導讀 大家好,很高興又和大家見面啦!!…

Ubuntu服務器中Swapper如何與虛擬內存配合

在Ubuntu服務器中,Swapper和虛擬內存是操作系統中重要的概念,它們共同協作以提高系統的內存管理效率。當物理內存不足時,Swapper會幫助系統將不活躍的數據從內存轉移到磁盤上的交換空間(Swap),以釋放內存給需要更多資源的進程。下…

SQL Server 中常見的數據類型及其詳細解釋、內存占用和適用場景

以下是 SQL Server 中常見的數據類型及其詳細解釋、內存占用和適用場景: 數據類型類別數據類型解釋內存占用適用場景整數類型bigint用于存儲范圍較大的整數,范圍是 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 字節需要…