使用GCC编译Notepad++的插件

Notepad++的本体[1](#1)是支持使用MSVC和GCC编译的[2](#2),但是Notepad++插件的官方文档[3](#3)里却只给出了MSVC的编译指南[4](#4)

网上也没有找到相关的讨论,所以我尝试在 Windows 上使用 MinGW,基于 GCC-8.1.0 的 posix-sjlj 线程版本[5](#5),研究一下怎么编译:

官方例程:

https://github.com/npp-plugins/plugindemo

语法修改:

StaticDialog.cpp 文件中,找到这一行:

cpp 复制代码
std::wstring errorMsg(_T(""));

可能 MSVC 和 GCC-8.1.0 存在语法不兼容,此处改为:

cpp 复制代码
std::wstring errorMsg(TEXT(""));

编译命令:

编译32位:

bash 复制代码
windres -F pe-i386 NppPluginDemo.rc -o NppPluginDemo.o
windres -F pe-i386 DockingFeature/goLine.rc -o goLine.o
g++ *.o *.cpp DockingFeature/*.cpp -DUNICODE -o NppPluginDemo.dll ^
  -m32 -static -shared -lshlwapi

编译64位:

bash 复制代码
windres NppPluginDemo.rc -o NppPluginDemo.o
windres DockingFeature/goLine.rc -o goLine.o
g++ *.o *.cpp DockingFeature/*.cpp -DUNICODE -o NppPluginDemo.dll ^
  -static -shared -lshlwapi

输出为 NppPluginDemo.dll 文件。

参数说明:

windres:编译资源文件
g++:编译C++文件
-F pe-i386-m32:以32位模式编译(不添加则为64位)
-o NppPluginDemo.dll:输出为 NppPluginDemo.dll 文件
-DUNICODE:在编译源码时添加 #define UNICODE
^:bat 文件的续行符,可以将一行命令写作多行,提高可读性
-static:静态编译
-shared:编译为动态库
-lshlwapiPluginDefinition.cpp 文件中用到 PathFileExistsPathAppendPathFindFileName 这3个函数,需要添加 shlwapi[6](#6)

另外,在编译时可能产生若干报错:

如果不希望产生过多干扰信息,可以加上 -Wno-write-strings-Wno-conversion-null 减少报错,添加参数 -w 则不显示任何 warning。

至于具体怎么开发Notepad++的插件。。我以后再研究一下。。=_=

本文中引用的链接可在尾注中查找。


  1. https://github.com/notepad-plus-plus/notepad-plus-plus ↩︎

  2. https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/BUILD.md ↩︎

  3. https://npp-user-manual.org/docs/plugins/#how-to-develop-a-plugin ↩︎

  4. https://github.com/npp-plugins/plugindemo ↩︎

  5. https://sourceforge.net/projects/mingw-w64/files ↩︎

  6. https://learn.microsoft.com/zh-cn/windows/win32/api/shlwapi ↩︎

相关推荐
tan180°2 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
程序视点2 小时前
Window 10文件拷贝总是卡很久?快来试试这款小工具,榨干硬盘速度!
windows
wuk9983 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
彭祥.4 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
lzb_kkk4 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
胖大和尚6 小时前
clang 编译器怎么查看在编译过程中做了哪些优化
c++·clang
钱彬 (Qian Bin)7 小时前
一文掌握Qt Quick数字图像处理项目开发(基于Qt 6.9 C++和QML,代码开源)
c++·开源·qml·qt quick·qt6.9·数字图像处理项目·美观界面
双叶8367 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
源代码•宸8 小时前
C++高频知识点(二)
开发语言·c++·经验分享
jyan_敬言9 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio