使用GCC编译Notepad++的插件

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

网上也没有找到相关的讨论,所以我尝试在 Windows 上使用 MinGW,基于 GCC-8.1.0 的 posix-sjlj 线程版本^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^。

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

如果不希望产生过多干扰信息,可以加上 -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 ↩︎

相关推荐
小俊俊的博客1 小时前
海康RGBD相机使用C++和Opencv采集图像记录
c++·opencv·海康·rgbd相机
waicsdn_haha1 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc1 小时前
C++ 日志输出
开发语言·c++·算法
薄荷故人_1 小时前
从零开始的C++之旅——红黑树及其实现
数据结构·c++
m0_748240021 小时前
Chromium 中chrome.webRequest扩展接口定义c++
网络·c++·chrome
qq_433554541 小时前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
努力学习编程的伍大侠1 小时前
基础排序算法
数据结构·c++·算法
yuyanjingtao2 小时前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
闻缺陷则喜何志丹2 小时前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
charlie1145141913 小时前
C++ STL CookBook
开发语言·c++·stl·c++20