链接器工具错误 LNK2019 - 模板类里声明友元函数

本文介绍了解决在C++编程中遇到的LNK2001错误的方法,该错误通常是因为编译器未能找到外部符号的定义。文章提供了具体的代码示例并详细解释了如何修改模板类和友元函数的声明来避免此类错误。
错误消息
在函数“function”中引用了无法解析的外部符号“symbol”

 

function 中找到了未定义的外部符号 (symbol)。若要解决此错误,请提供符号定义或移除引用它的代码。一般报错如下:

error LNK2001: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class test<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$test@H@@@Z)

 

 

网上看到的一种改法,报error LNK2001: unresolved external symbol的错!因为没有像sun手册中提到的“实际的模板声明必须在友元声明之前”中讲到的“由于operator<<有一个type array<T>的参数(模板类型形参?),因此在声明函数之前,必须声明array<T>。

 

### 解决Visual Studio链接器工具中出现的LNK2019错误 当遇到 `ngx_google_perftools_module.obj` 报告未解析外部符号如 `ProfilerStart`, `ProfilerStop`, 和 `ProfilerRegisterThread` 的 LNK2019 错误时,这通常意味着编译环境中缺少必要的库文件或头文件路径配置不正确。 #### 删除不必要的模块文件 对于特定于 Google PerfTools 模块的情况,建议移除项目中的 `misc/ngx_google_perftools_module.c` 文件[^1]。此操作可以防止因缺失依赖项而导致的链接失败。 #### 配置库路径和附加选项 为了彻底解决问题并确保其他类似情况不再发生: - **确认安装Google PerfTools库**:确保已下载并正确安装了适用于Windows平台的Google PerfTools库版本。 - **设置额外包含目录**: 在项目的属性页内,导航到 C/C++ -> General -> Additional Include Directories 并添加指向PerfTools头文件的位置。 - **指定库目录**: 转至 Linker -> General -> Additional Library Directories 输入对应静态库(.lib)所在的绝对路径。 - **引入所需的导入库**: 前往 Linker -> Input -> Additional Dependencies 添加如下条目(假设使用的是Release版): ```plaintext libprofiler.lib ``` 通过上述调整能够有效处理由第三方组件引起的此类链接阶段冲突问题。 ```cpp // 示例:CMakeLists.txt 中定义外部库位置的方式之一 set(GOOGLE_PERFTOOLS_ROOT "path/to/google-perftools") include_directories(${GOOGLE_PERFTOOLS_ROOT}/include) link_directories(${GOOGLE_PERFTOOLS_ROOT}/lib/release) add_executable(my_project main.cpp) target_link_libraries(my_project ${GOOGLE_PERFTOOLS_ROOT}/lib/release/libprofiler.lib) ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值