thread_local_storage.obj : error LNK2001: 无法解析的外部符号 pTlsCallback

本文介绍了一个在将Hadoop 2.6.0的libhdfs C代码转换为Visual C++项目并尝试编译时遇到的错误:无法解析的外部符号 pTlsCallback。文章详细解释了错误原因,并提供了解决方案。

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

错误描述

      错误信息如标题所示。这个错误出现在将hadoop 2.6.0的libhdfs的C代码转换成一个Visual C++工程进行编译的时候报的错。thread_local_storage.cpp是源码目录os/windows下的源文件(原来是thread_local_storage.c)。


错误的原因

      这是因为thread_local_storage.cpp中有一条预处理指令,

#pragma comment(linker, "/INCLUDE:pTlsCallback")

这是表示将pTlsCallback包含进符号表的意思,这个名字定义的情况如下,

#pragma const_seg(".CRT$XLB")
extern const PIMAGE_TLS_CALLBACK pTlsCallback;
const PIMAGE_TLS_CALLBACK pTlsCallback = tlsCallback;
#pragma const_seg()
pTlsCallback是tlsCallback的别名。不过libhdfs原来都是C代码,作为C代码编译pTlsCallback这个符号自然是存在的,但是转换成C++工程编译后,可能就不是这个名字了,因此预处理指令也就不能找到pTlsCallback,那么就会当它是一个外部名字,于是乎就会报“无法解析的外部符号”错误。


解决办法

        声明pTlsCallback的语句略作修改如下:

extern "C" const PIMAGE_TLS_CALLBACK pTlsCallback;
然后就能顺利编译通过。


附:这个错误似乎很少见,特意贴出来与大家共享。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值