首页 新闻 会员 周边 捐助

error LNK2001: unresolved external symbol

0
悬赏园豆:20 [待解决问题]

用Visual Studio 2015编译CoreCLR遭遇下面的错误:

error LNK2001: unresolved external symbol

请问如何解决这个问题?

dudu的主页 dudu | 高人七级 | 园豆:29333
提问于:2015-02-28 11:07
< >
分享
所有回答(2)
0

光看这个可解决不了,你得找到具体是哪个外部符号无法解析。通常的原因是只声明了类型、方法,但是没有实现,或者实现部分没有被编译或链接。

Launcher | 园豆:45050 (高人七级) | 2015-02-28 11:12

但是用VS2013就能正常编译

支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 11:23

@dudu: 在 VS 2015 中,将每个项目的“平台工具集”都修改为 Visual Studio 2013(v120),然后编译试试。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-28 11:28

@Launcher: VS项目是由cmake生成的:

cmake -G "Visual Studio 14 2015 Win64"

如果指定为v120:

cmake -G "Visual Studio 14 2015 Win64" -G "v120"

会出现下面的错误:

-- The C compiler identification is unknown
-- The CXX compiler identification is unknown

 

支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 11:47

@dudu: 人家不是说了Bringing VS 2015 support is of the top items on our list. Stayed tuned.

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2015-02-28 12:19

@羽商宫: 我想自己先尝试一下

支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 12:54

@dudu: 你用 VS 2013 编译后是不是会得到一个 CoreCRL.sln ?

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-28 13:05

@Launcher: 有这个,是cmake生成的,用VS2015可以打开。在VS2015中直接编译时出现的第一个错误是:

Error C3688 invalid literal suffix 'L'; literal operator or literal operator template 'operator ""L' not found	cee_wks	
d:\dev\dotnet\coreclr-build-with-2015\coreclr\src\vm\dwreport.cpp 98
支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 13:52

@Launcher: 而用VS2013打开CoreCLR.sln可以正常编译

支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 13:58

@dudu: 用 VS 2015 打开此 SLN,将每个项目的“平台工具集”都修改为 Visual Studio 2013(v120),编译试试。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-28 14:03

@dudu: 帮我看看 98 是哪行代码?我看这个 L 符号特别像 UNICODE 字符串声明。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-28 14:05

@Launcher: 98行代码:

const WCHAR kWatsonPath[] = WATSON_INSTALLED_REG_SUBPATH;

WATSON_INSTALLED_REG_SUBPATH的定义中用到了L:

#define QUEUE_REG_SUBPATH  L"Software\\"DEFAULT_SUBPATH
#define QUEUE_REG_OKTOREPORT_VALUE L"OkToReportFromTheseQueues"
#define WATSON_INSTALLED_REG_SUBPATH QUEUE_REG_SUBPATH L"\\Installed"
支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 14:12

@Launcher: 

#define QUEUE_REG_SUBPATH  L"Software\\"DEFAULT_SUBPATH

改为(加了一个空格):

#define QUEUE_REG_SUBPATH  L"Software\\" DEFAULT_SUBPATH

该错误消失。

这是VS2015的C++编译器的变化带来的问题,详见:L"" with ## fails in macro in vs2015 C++ preview

支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 14:17

@dudu: https://connect.microsoft.com/VisualStudio/feedback/details/1032028/l-with-fails-in-macro-in-vs2015-c-preview

你试试新建一个 C++ 项目,能否重现这个问题。

二,你看 dwreport.cpp 文件开头

const WCHAR kErrorReportingPoliciesKey[] = W("SOFTWARE\\Policies\\Microsoft\\PCHealth\\ErrorReporting");
const WCHAR kErrorReportingKey[] = W("SOFTWARE\\Microsoft\\PCHealth\\ErrorReporting");

看下宏 W 的定义是啥?

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-28 14:17

@Launcher: 那台安装VS2015的机器上没有安装VS2013,“平台工具集”中根本没有v120的选项,而且有59个项目。

支持(0) 反对(0) dudu | 园豆:29333 (高人七级) | 2015-02-28 14:20

@dudu: 没有就不行了,除去语法变动问题,其它编译器兼容性比较好解决。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-02-28 15:30
0

https://msdn.microsoft.com/en-us/library/f6xx1b1z.aspx

看过这个么

羽商宫 | 园豆:2490 (老鸟四级) | 2015-02-28 12:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册