獲取並編譯最新的Notepad++原始碼
一、引言
我們在寫程式碼的時候,最喜歡使用一些程式碼編輯器來編寫一些輕型的程式碼檔案,這裡比較經典而且使用者很多的就是Notepad++了。Notepad++是一款非常簡潔輕巧功能非常強大的開源軟體,那麼只要有一點點開源精神的、並且想要見識下C++11程式碼風格的程式設計師,必然就會有想要拿到Notepad++的原始碼並進行編譯的想法,這裡我當然也不除外。
基於好奇心害死貓的想法,我開始了Notepad++的原始碼獲取和編譯的旅程。這一路上還是遇到了不少坑的,這裡希望為那些對Notepad++原始碼好奇,卻又不知道如何獲取和編譯的人指明一條至少我實踐成功了的道路。
二、獲取Notepad++的最新原始碼
1.GitHub上拉取Notepad++原始碼
當然了,需要科學上網。
作為一個程式設計師,最基本的技能就是科學上網了。這裡附上Notepad++的官方網站Notepad++官方網站。在Notepad++的官方網站上,可以下載到最新的Notepad++,可以瞭解最新的Notepad++相關的資訊。這些與Notepad++原始碼獲取和編譯並沒有太大關係,英語好的同學可以看看。
其中,Notepad++的原始碼託管在Github上面,這裡附上Notepad++的原始碼地址Notepad++的Github託管地址。熟悉Github的同學當然知道如何下載了。這裡為了不瞭解Github的同學附上原始碼如何下載的講解,當然了,這裡需要科學上網,並且還需要至少vs2013的IDE環境。
如上圖所示,點選Download ZIP
可以下載Notepad++的原始碼了。
如果想直接在vs2013及其以上的IDE裡使用Git管理工具下載,也可以點選Open in Visual Studio
,這裡就會自動開啟本地的vs,並且進入團隊資源管理器
,如上圖所示,第一個框填入Notepad++的git託管地址,這裡可以寫入https://github.com/notepad-plus-plus/notepad-plus-plus.git
,第二個是本地的儲存庫地址,也就是原始碼的下載地址,請根據自己的喜好寫入即可。
2.不會科學上網的同學請看這裡…
如果不會科學上網也沒關係,這裡我在CSDN上上傳了2017-3-25最新的Github上面的同步Notepad++的原始碼,可以點選這裡進行下載
三、編譯Notepad++
下載好了原始碼後,可以看到這樣的目錄結構。
其中,PowerEditor
是Notepad++的專案檔案,而scintilla
是Notepad++引用的一個強大的程式碼編輯庫。我們編譯的順序呢,就是先編譯scintilla
專案,得到SciLexer.dll
檔案,然後再編譯PowerEditor
專案即可。
1.編譯scintilla專案
如何編譯scintilla
專案呢?其實關於專案的編譯呢,Notepad++的Github介紹主頁已經說得非常清楚了。這裡我選擇了不使用boost庫的編譯方式。
圖裡已經說得非常清楚了,這裡把重點步驟翻譯成中文:
- 在windows的執行視窗中輸入
Developer Command Prompt for
,然後點選進去,進入vs的命令列模式 - 變換地址到本地的Notepad++的原始碼目錄中去,進入
scintilla\win32\
目錄。(附:windows的命令列變換命令,使用cd 進入資料夾,e: 可進入e盤,dir 可檢視當前目錄內容,不再贅述) - 輸入
nmake NOBOOST=1 DEBUG=1 -f scintilla.mak
編譯即可 - 將生成的
SciLexer.dll
檔案從scintilla\bin\
目錄中拷貝到我們將要編譯的notepad++.exe
檔案的同一目錄下
這裡只翻譯了部分內容,還有更詳細的內容請看附圖。
2.編譯PowerEditor專案
這裡進入PowerEditor\visual.net\
目錄中,將圖中選中專案使用vs開啟。
這裡生成解決方案也許會出現問題。
如上圖,這裡是因為編碼出現了一點點問題。顯示錯誤資訊..\src\MISC\Common\mutex.cpp : error C2220: 警告被視為錯誤 - 沒有生成“object”檔案
。經過我查詢資料,這個問題可以這麼解決。專案
-> Notepad++屬性
-> 配置屬性
-> C/C++
-> 常規
,將警告視為錯誤
置為否
即可。
重新生成解決方案,我這裡生成成功了。
3.問題:
大功就要告成啦!!!但是,顯示了這麼一個視窗。誒!怎麼會找不到SciLexer.dll
檔案呢?剛才折騰了那麼久,已經編譯了SciLexer.dll
檔案,並且(如果跟隨我的步驟的話)已經把SciLexer.dll
檔案也拷貝到了notepad++.exe
檔案的同一目錄下了啊。那程式怎麼會提示找不到SciLexer.dll
檔案呢?真的是好奇怪啊。
這裡我仔細檢查了有沒有把檔案放錯了,但是檢查了過後,發現並沒有放錯。那麼,這就奇怪了呢?
有問題,沒事,我們有原始碼呀!那就打斷點跟進去看看!
經過跟程式碼看到這個函式
TCHAR moduleFileName[1024];
HMODULE loadSciLexerDll()
{
generic_string sciLexerPath = getSciLexerFullPathName(moduleFileName, 1024);
if (not isCertificateValidated(sciLexerPath, TEXT("Notepad++")))
return nullptr;
return ::LoadLibrary(sciLexerPath.c_str());
}
可以看出,這個函式是載入SciLexer.dll
檔案的函式。那麼肯定是isCertificateValidated(sciLexerPath, TEXT("Notepad++"))
返回了FALSE
,才導致了錯誤。那麼,我們繼續跟進去!
根進去,看到了這麼一個函式
// Get message handle and store handle from the signed file.
result = CryptQueryObject(CERT_QUERY_OBJECT_FILE,
fullFilePath.c_str(),
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
CERT_QUERY_FORMAT_FLAG_BINARY,
0,
&dwEncoding,
&dwContentType,
&dwFormatType,
&hStore,
&hMsg,
NULL);
就是因為result
的值為空,導致了我們的返回失敗,那很簡單了,就把isCertificateValidated
這個函式註釋掉吧。相關程式碼修改如下:
TCHAR moduleFileName[1024];
HMODULE loadSciLexerDll()
{
generic_string sciLexerPath = getSciLexerFullPathName(moduleFileName, 1024);
// 註釋了這個程式碼就可以跳過SciLexer.dll的檔案數字簽名證書檢查
// 進而成功呼叫SciLexer.dll
/*if (not isCertificateValidated(sciLexerPath, TEXT("Notepad++")))
return nullptr;*/
return ::LoadLibrary(sciLexerPath.c_str());
}
那麼問題來了,CryptQueryObject
函式到底是幹什麼的呢?經過查詢,這個函式是用來驗證檔案數字簽名的。猜想也許是我們自己編譯的SciLexer.dll
檔案的檔案數字簽名有問題。註釋了isCertificateValidated
這個函式,繼續生成解決方案,果然成功編譯運行了程式!!!
哈哈哈!終於可以欣賞C++11風格的,開源的Notepad++的原始碼啦!!!
三、總結
總的來說,Notepad++的原始碼還是很值得學習的,其中C++11風格程式碼的運用,開源庫SciLexer的封裝,都是很值得我們學習的。
打算最近的清明節好好研究研究Notepad++的原始碼,增長下自己的見識,哈哈哈~~~
相關推薦
獲取並編譯最新的Notepad++原始碼
一、引言 我們在寫程式碼的時候,最喜歡使用一些程式碼編輯器來編寫一些輕型的程式碼檔案,這裡比較經典而且使用者很多的就是Notepad++了。Notepad++是一款非常簡潔輕巧功能非常強大的開源軟體,那麼只要有一點點開源精神的、並且想要見識下C++11程式碼風
DOS工具: 自動從VSS獲取並編譯,複製,上傳,打包的工具
@echo offrem -- =============================================rem -- DESCRIPTION: <自動_VSS管理バッチ>rem -- AUTHOR: <>rem -- CREATE
chromium瀏覽器開發系列第二篇:如何編譯最新chromium原始碼
說一下為什麼這麼晚才發第二篇,上週和這周department的工作太多了,晚上都是十點半從公司出發,回家以後實在沒有多餘的精力去摸鍵盤了。所以請大家包涵! 上期回顧: chromium原始碼下載: 找個靠譜的vpn(我試過了,網上說的不用vpn拿程式碼的都不靠譜)
使用.NET Core優雅獲取並展示最新疫情資料
前言新型冠狀病毒的出現,著實讓人緊張。我每天一大早都會去檢視今天的最新資料,可是每次的資料都挺讓人揪心的。今天突然間很想看看過去的歷史的資料,結果查了很多資料都不是很全。反正國家讓我們待在家裡做貢獻,那我們也可以多做做研究,偶然的機會發現了一個API可以查到歷史資料,於是就用.NET Core 3.1實現了一
OSG-獲取OSG的原始碼和第三方庫並編譯
獲取OSG的原始碼有很多方式。 這裡說下其中的兩個地方,第一就是中國的OSG網站http://www.osgchina.org/,這個網站目前應該是由中國西安恆歌科技維護,同時,西安恆歌科技也是一家已OSG為基礎開發的一家很好的公司,其公司旗下的FreeEarth有很多方
反編譯獲取微信小程式原始碼(筆記)
一、前言: 本人的該部落格僅供研究,切記用於非法途徑。如有任何非法行為,皆與本博主無關。 跟著流程走,100%獲取原始碼成功。 流程如下: (1)下載並安裝夜神模擬器。下載地址:https://download.csdn.net/download/qq_31362105/10732350
自動下載原始碼_並編譯_打包_部署_重啟服務的Shell指令碼
完整版見https://jadyer.github.io/2015/06/03/linux-shell-deploy/ #!/bin/sh APP_NAME=engine APP_WARS=JadyerEngine-web/target APP_PATH=/app/
【Launcher】獲取最新Launcher原始碼,並且匯入到Android Studio
2.翻牆的可以直接通過 git clone https://android.googlesource.com/platform/packages/apps/Launcher3 下載原始碼(gi
菜鳥與 cef 的邂逅之旅(一):cef 原始碼獲取與編譯
一、引言 最近工作中涉及到了有關嵌入瀏覽器控制元件的任務,並且要求支援 H5。之前使用了 wke,但是發現其對於 H5 的支援不夠好,因此只能選擇“聞名已久”的 cef。 cef 是什麼呢: CEF 全稱 Chromium Embedded Fram
最新ICE原始碼編譯安裝
發現ICE3.7版本在編譯安裝時比之前的版本省事了很多,少了很多雜七雜八的依賴庫;估計是被grpc火熱情景給逼的? Compiling [amd64-shared] src/Ice/CollocatedRequestHandler.cpp Compiling [amd64-shared] sr
通過清華大學映象下載Android原始碼並編譯原始碼
之前看原始碼都是在Windows下用SourceInsight看,雖然達到了研究原始碼的效果,但終究還是有遺憾。。。趁著週末,準備在Ubuntu虛擬機器上下載編譯原始碼。 之前下原始碼時,有了解一些Android原始碼的情況。網上的教程很多也是從谷歌官網下原始碼,但是最近藍燈不好用,FQ效率有
編譯錯誤 說明: 在編譯向該請求提供服務所需資源的過程中出現錯誤。請檢查下列特定錯誤詳細資訊並適當地修改原始碼。
系統釋出後,在本地機子上一切正常,但是上傳到伺服器出現如下錯誤: “/”應用程式中的伺服器錯誤。 -------------------------------------------------------------------------------- 編譯錯誤
vs2010編譯notepad++原始碼
1 官網下載原始碼 http://notepad-plus-plus.org/download/v6.6.9.html 2 解壓 其中Notepad++是原始碼在PowerEditor資料夾裡,scintilla是一個外掛,後面要在PowerEditor裡面用到。 3
Chromium原始碼獲取與編譯--附加一個簡單例子的編譯
從工作到現在,一直弄介面相關的東西,弄了好多年,包括前公司也買了一套UI,但是用下來以後發現不是這個問題就是那個問題。現在新的公司還在用MFC。MFC其實沒什麼不好,就是不能改原始碼這點比較糾結。。(誰說不能改原始碼的,改完自己編譯就是了。。orz。。你倒是給我個工程檔案?
在Ubuntu16.04上下載並編譯Android原始碼
Android原始碼位於Google的Git程式碼庫中,由於Android原始碼工程過於複雜龐大,所以Google以Git為基礎用Python指令碼,寫了一個管理工具Repo。 1.安裝Repo 在安裝Repo之前,假定已經安裝好了git。 mkdir ~
docker最新程式碼原始碼編譯
前言 docker的編譯環境非常複雜,但是docker是幹嘛的?環境怎能成為問題,於是docker官方提供了docker編譯環境dockerfile。於是docker編譯就非常簡單了。 獲取原始碼 拉取最新的docker原始碼 git
C# 在編譯向該請求提供服務所需資源的過程中出現錯誤。請檢查下列特定錯誤詳細資訊並適當地修改原始碼。
行 1: #pragma checksum "E:\WEBSERVICE\WebClient\default.aspx" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "8929E17C339CE9FDACB5A0E34138AABF" 行 2: //----
Android獲取和編譯原始碼以及獲取和編譯核心原始碼(整理)
$ ls -l /usr/bin/gcc* lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6 -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/
chromium瀏覽器開發系列第一篇:如何獲取最新chromium原始碼
轉自:https://my.oschina.net/ghost045/blog/397663 摘要: 前面介紹了原始碼下載,編譯。接下來要介紹一下目錄結構,方便大家以後對架構的瞭解。 附上上兩篇文章地址,方便大家檢視: 下載原始碼 編譯原始碼 上兩篇介紹了下載原始碼和
chromium原始碼下載並編譯
目前,chromium的原始碼已經全部遷移到了git管理,所以本文主要梳理一下下載chromium原始碼的過程。 一、概況 chromium現在分為四個大分支: canary:最前沿的版本,每天都發布,bug一堆,不適合新人 dev:每兩個星期釋出,