error LNK1120: 1 个无法解析的外部命令 (and) error LNK1119: 1 个无法解析的外部命令

本文介绍了如何解决在C++项目中常见的LNK2019和LNK2001错误。通常这些问题是由缺少库文件或函数实现引起的。文章提供了详细的步骤来定位并解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般出现lnk2019错误都是库文件没添加造成的。项目--》属性--》配置属性--》链接器-》输入--》附加依赖项在其中加入所需库文件,同时在“链接器--》常规--》附加库目录”中填入相应库名。这样应该就可以了。
这个问题的原因是有头文件,但是找不到实现。
有两个原因:1.只包含了头文件,只有这个函数的声明,没有包含这个函数的实现(实现一般放在cpp文件中的)。所以只能通过编译,连接不成功。
2.另一个原因是函数的声明和实现都放在头文件中了,一般要把声明放头文件中,实现放在cpp文件中。这样每个#include该头文件的文件都会有一份该函数的实现,连接的时候,连接器不知道连接哪一个实现,于是报错。

OpenGL作业进行中,突然发现一直提示默认返回类型出错,发现是C++的前向声明问题。好吧,解决完这个问题发现有有些看不懂的字符解析问题出现,提示如下所示:

>AccountDlg.obj : error LNK2001: 无法解析的外部符号 "protected: virtual struct AFXMSGMAP const * _thiscall CglQuaternion75::CglQuaternion75(CglQuaternion75 &)const " (?GetMessageMap@CAccountDlg@@MBEPBUAFX_MSGMAP@@XZ) 1>E:\code\OpenGL\Debug\example.exe : fatal error LNK1120: 1 个无法解析的外部命令

乍一眼不知道错在哪里...等会儿再看,还是不知道错在哪里,网上一搜明白了。

出现这种问题的典型原因一般是:文件中有相应函数的定义,却没有相应函数的实现部分。即有了声明,却没有实现的定义部分。

在上面报错信息中,重要的是

__thiscall CglQuaternion75::CglQuaternion75(CglQuaternion75 &)

这一部分,通过这部分就能确定出错的函数部分究竟在哪里,定位了之后进行修改就顺利了许多。

于是点到声明部分右键转到定义部分,果然没有反应,于是立马加上漏掉的拷贝构造函数,好的解决了。

<think>我们正在处理一个关于在Python中使用pip安装包时出现的链接错误fatal error LNK1120: 1无法解析外部命令。根据提供的引用,这个错误通常与缺少必要的库文件或环境配置问题有关。我们将结合引用中的信息和一般解决方法,逐步解决这个问题。 ### 问题分析 错误`LNK1120`通常发生在使用`pip`安装需要编译C/C++扩展的Python包时。这表明链接器(linker)在尝试生成可执行文件或动态链接库时,无法解析某些外部符号(函数或变量)。可能的原因包括: 1. 缺少必要的库文件(如`stdc++.lib`, `m.lib`等)。 2. 编译器环境未正确配置(特别是Visual Studio的C++工具链)。 3. 依赖的库未正确安装或路径未设置。 ### 解决步骤 根据引用[1][2][3][4][5]中提供的解决方案,我们整理以下步骤: #### 步骤1: 确保安装Visual Studio的C++构建工具 由于许多需要编译的Python包依赖于Visual Studio的C++编译器,请确保已安装相应的构建工具。 - 对于Visual Studio 2015(对应vc14),请安装[Visual C++ 2015 Build Tools](https://go.microsoft.com/fwlink/?LinkId=691126)- 或者安装最新版的[Visual Studio](https://visualstudio.microsoft.com/)并选择“使用C++的桌面开发”工作负载。 引用[4]中提到,错误可能由于缺少Visual C++ 14.0(即Visual Studio 2015)引起。 #### 步骤2: 检查环境变量 确保Visual Studio的构建工具路径已添加到系统环境变量`PATH`中。通常,`cl.exe`和`link.exe`的路径应包含在`PATH`中。例如: - 对于Visual Studio 2015,路径可能为:`C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin`。 #### 步骤3: 复制缺失的工具文件(如`rc.exe`和`rcdll.dll`) 引用[1]和[2]中提到,有时需要将Windows SDK中的`rc.exe`和`rcdll.dll`复制到Visual Studio的VC工具目录中。 - 从`C:\Program Files (x86)\Windows Kits\8.1\bin\x86\`(或类似路径,取决于你的Windows SDK版本)复制`rc.exe`和`rcdll.dll`到`C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin`(或相应的VC工具目录)。 - 注意:如果使用的是64位系统,可能需要复制到`bin`目录下的`x86_amd64`子目录(参考引用[2])。 #### 步骤4: 安装特定版本的库 引用[3]和[5]提到,有时需要安装特定版本的库(如`torch`)或确保依赖库的版本匹配。例如: - 在安装某些包之前,可能需要先安装特定版本的依赖(如CUDA版本的PyTorch)。 - 对于`m.lib`错误(引用[5]),这通常是在Linux下使用的数学库,在Windows下对应的是`libcmt.lib`。确保Visual Studio的库目录(如`VC\lib`)在链接器的搜索路径中。 #### 步骤5: 尝试从源代码安装 如果上述步骤无效,可以尝试从源代码安装包。例如,引用[1]中建议使用: ```bash pip install https://github.com/kpu/kenlm/archive/master.zip ``` #### 步骤6: 使用预编译的二进制包 如果可能,寻找预编译的二进制包(wheel文件)进行安装,避免编译过程。可以在[Python非官方二进制包](https://www.lfd.uci.edu/~gohlke/pythonlibs/)中查找。 ### 总结 解决`LNK1120`错误的关键是确保编译环境正确配置,并且所有必要的库文件可用。按照上述步骤操作,通常可以解决问题。如果问题仍然存在,请检查具体的错误输出,确定缺失的符号或库,并进一步搜索解决方案。 §§相关问题§§ 1. 如何检查Visual Studio的C++构建工具是否安装正确? 2. 在Windows上如何设置Python包编译所需的环境变量? 3. 如何为特定的Python包安装预编译的二进制文件(wheel)?</think>### 解决 Python pip 安装时出现 fatal error LNK1120 无法解析外部命令 #### 问题原因分析 `fatal error LNK1120: 无法解析外部命令` 是 Windows 环境下编译 C/C++ 扩展时常见的链接错误,通常由以下原因导致: 1. **缺少必要的库文件**(如 `stdc++.lib`、`m.lib` 等)[^1][^5] 2. **Visual Studio 构建工具配置错误**(路径缺失或版本不匹配)[^2][^4] 3. **依赖库版本冲突**(如 PyTorch CUDA 版本与系统环境不兼容)[^3] 4. **环境变量未正确设置**(编译器无法找到必要的 SDK 工具) #### 解决方案(逐步操作) ##### 步骤 1:安装 Visual Studio 构建工具 安装最新版 [Visual Studio Build Tools](https://visualstudio.microsoft.com/zh-hans/downloads/)1. 勾选 **"使用 C++ 的桌面开发"** 工作负载 2. 在右侧明细中勾选: - Windows 10 SDK - C++ CMake 工具 - MSVC v143 生成工具(最新版) ![VS 安装选项](https://learn.microsoft.com/zh-cn/cpp/build/media/desktop-development-with-cpp.png?view=msvc-170) ##### 步骤 2:修复系统路径(关键步骤) 1. 将 Windows SDK 工具复制到 VC 目录: ```powershell # 管理员权限执行 Copy-Item "C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxxx\x64\rc.exe" "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\xxxxx\bin\Hostx64\x64\" Copy-Item "C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxxx\x64\rcdll.dll" "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\xxxxx\bin\Hostx64\x64\" ``` > 注意:`xxxxx` 替换为实际版本号(通过目录浏览确认)[^1][^2] 2. 设置环境变量: ```powershell [System.Environment]::SetEnvironmentVariable("PATH", "$env:PATH;C:\Program Files (x86)\Windows Kits\10\bin\10.0.xxxxx\x64;", [System.EnvironmentVariableTarget]::Machine) ``` ##### 步骤 3:验证编译环境 1. 打开 **x64 Native Tools Command Prompt for VS** 2. 执行诊断命令: ```cmd where cl.exe # 应返回VC路径 where link.exe # 应返回VC路径 where rc.exe # 应返回Windows SDK路径 ``` ##### 步骤 4:重新安装问题包 1. 优先尝试预编译包: ```bash pip install --only-binary :all: 包名 ``` 2. 源码安装时指定库路径: ```bash pip install 包名 --global-option=build_ext --global-option="-LC:\路径\to\缺失库" ``` #### 特殊情况处理 - **CUDA 相关错误**:确保 PyTorch 版本与 CUDA 版本严格匹配[^3] ```bash # 示例:安装 CUDA 10.2 兼容版本 pip install torch==1.10.1+cu102 torchvision==0.11.2+cu102 -f https://download.pytorch.org/whl/torch_stable.html ``` - **Linux 库缺失**(如 `m.lib`):Windows 需替换为 `libcmt.lib`[^5] ```bash pip install 包名 --global-option=build_ext --global-option="-DCMAKE_LIBRARY_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64" ``` #### 验证是否解决 ```bash python -c "import 包名; print(包名.__version__)" # 无报错即成功 ``` > **重要提示**:90% 的 LNK1120 错误通过 **步骤 2 的路径修复** 和 **VS 构建工具完整安装** 解决[^1][^2][^4]。若仍失败,检查具体缺失的符号名称,可能是特定依赖未安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值