使用VS2017命令提示符+NMake编译Scintilla遇LNK1104链接错误求助
解决Scintilla编译时的LNK1104链接错误(针对Notepad++编译场景)
我之前帮不少人解决过Notepad++编译Scintilla的问题,你遇到的LNK1104链接错误其实是编译链里很常见的问题,结合你已经解决了文件缺失、rc找不到的情况,咱们可以从这几个方向排查:
检查链接器所需的库文件是否存在
LNK1104本质是链接器找不到指定的.lib或.dll文件。先打开VS2017命令提示符,进入Scintilla的编译目录,查看脚本指定的输出路径(比如bin或lib文件夹)里是否生成了预期的库文件(比如SciLexer.lib)。如果文件不存在,说明前面的编译步骤其实有隐性错误,建议重新运行脚本并仔细查看每一步的日志,别忽略那些看似不致命的警告。确认VS2017环境变量配置完整
虽然你已经解决了rc命令找不到的问题,但可能还有其他关键环境变量没配置到位。在命令提示符里输入echo %LIB%,检查输出内容是否包含:- Scintilla依赖的第三方库目录(如果有的话)
- VS2017自带的库路径(比如
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\<你的版本号>\lib\x86)
如果缺少路径,可以手动用set LIB=%LIB%;<缺失的路径>临时添加,再重新编译试试。
核对编译脚本中的链接参数
打开你使用的编译脚本,重点检查链接阶段的参数:- 确认指定的库文件名没有拼写错误(比如把
SciLexer.lib写成SciLexer.dll) - 检查库文件的路径是绝对路径还是相对路径,如果是相对路径,要确保脚本运行时的当前目录和预期一致
- 注意编译架构:Notepad通常是32位程序,所以必须用VS2017的x86命令提示符编译Scintilla,别选错成x64环境,否则生成的库和Notepad的架构不匹配也会触发LNK1104。
- 确认指定的库文件名没有拼写错误(比如把
清理旧编译文件后重新编译
残留的旧中间文件(比如obj文件夹里的.obj文件)可能会导致编译冲突。先删除Scintilla目录下的obj、bin等输出文件夹,然后重新运行编译脚本,全程盯着日志输出,确保每一步编译都没有报错,再看链接阶段是否还会出现LNK1104。
内容的提问来源于stack exchange,提问作者proeng
相关产品推荐
相关产品推荐

