这个问题搞了我 5 天(包括双休日), 我一定要记录下来。

问题描述

用 Visual Studio 2008 编译 WinCE 7 平台的应用程序,编译没问题,链接时出现了一堆 Link error, 最多的就是 __imp___rt_sdiv

项目结构

在我项目的 sln 文件中有2个projects, 应用程序 a.exe 和 静态链接库 b.lib. 其中 a 用到了 b 中的函数,b.lib 以静态库的方式链接进 a.exe.

Debugging

我当时解决这个问题的思路有 2 种:

1. 参考已有的 WinCE 7 项目 (application + static library) 的项目配置

2. 硬刚这个问题,google "__imp___rt_sdiv"

由于已有现成的WinCE 7 application + static library link 的项目可供参考,于是我先选择了第一种方法。很遗憾,把 C/C++, Linker 中的配置都抄了过来,链接还是相同的错误(后续证明是我抄漏了。。。)。

那就硬刚吧,google  "__imp___rt_sdiv" link error, 发现 "__rt_sdiv" 是 ARM compiler's runtime helper function for signed division, 会被 coredll 解析。在我们程序链接时,如果用到函数的在其他 dll 中,编译器会链接时在 Import Address Table(IAT) 表中加上 "__imp_" 前缀,记录地址,以便程序运行时能跳转并找到对应函数。 使用 dumpbin 命令 dump coredll.dll,发现这个符号确实是有的。

导出的 coredll.txt 中有: 2005  6DD 0004BB68 __rt_sdiv

基于上述信息,我猜测可能是 a.exe 链接的时候没有把 WinCE 的系统库 coredll.dll 链接进去,导致找不到 __rt_sdiv. 很有可能是我的 Visual Studio 配置不对。

于是我又回到了方法1,参考已有正常的项目,打开 .vcproj 文件一行一行地去比对。终于找到了几个有问题的配置,修改如下:

1. 同时修改应用程序和库项目的 Properties -> C/C++ -> Code Generation -> Runtime Library -> Multi-threaded DLL (/MD)

- 我之前有问题的配置是 Multi-threaded (/MT)

- 

2. 同时修改应用程序和库项目的 Properties -> General -> Code Generation -> Use of MFC -> Use Standard Windows Libraries

-  

3. 其他 WinCE 配置参考 - http://www.voidcn.com/article/p-qvbmcyzh-py.html

1. 当前项目右键-属性-平台修改为windows mobile x SDK
  2. 配置属性-C/C++-预处理器-预处理器定义栏里面:NDEBUG;_WIN32_WCE=$(CEVER);UNDER_CE;$(PLATFORMDEFINES);WINCE;_WINDOWS;_USRDLL;TEST_DLL_EXPORTS;$(ARCHFAM);$(_ARCHFAM_);_UNICODE;UNICODE
  3. 链接器-输入-附加依赖项:strmbase.lib strmiids.lib
  4. 链接器-系统-子系统栏-windows CE

___tmainCRTStartup error

这个是另外一个链接问题了,参考 stack overflow 上的答案:

You can do this by adding the following to Properties -> Linker -> Command line:

/ENTRY:"mainCRTStartup"

Reference

https://blogs.msdn.microsoft.com/russellk/2005/03/20/lnk4217/

https://software.intel.com/en-us/forums/intel-fortran-compiler/topic/500949

https://stackoverflow.com/questions/6626397/error-lnk2019-unresolved-external-symbol-winmain16-referenced-in-function

https://social.msdn.microsoft.com/Forums/en-US/55677078-0329-437c-bf80-f2e7c8dbf126/failed-to-link-the-axsample-sample-project?forum=vssmartdevicesnative

error LNK2001: unresolved external symbol __imp___rt_sdiv的更多相关文章

  1. VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

    最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...

  2. [异常] VC6.0 error LNK2001: unresolved external symbol _main解决办法

    来自:http://www.douban.com/note/65638800/ 学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说 ...

  3. VC6.0 error LNK2001: unresolved external symbol _main解决办法

    学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过.产生连接错误的原因非常多,尤其LNK2001错误 ...

  4. (转载)浅析error LNK2001: unresolved external symbol "public: __thisc...

    学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于      编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,      编译都已通过.产生连接错误的原因非常多 ...

  5. MASMPlus编译出错:error LNK2001: unresolved external symbol _WinMainCRTStartup

    初学汇编,感觉很多不懂.不过那也是,如果懂了的话就不用学了,从无到有学习一门编程语言果然不是那么容易的一件事. 学习汇编总得要有一款汇编软件才行,没理由只是使用Windows自带的DEBUG.于是上了 ...

  6. error LNK2001: unresolved external symbol _main

    想运行一个网上下载的opengl离屏渲染(渲染到纹理FBO)的程序,然后一直报错 error LNK2001: unresolved external symbol _main 解决了一下午终于弄明白 ...

  7. VC6.0 error LNK2001: unresolved external symbol __imp__ntohl@4

    --------------------Configuration: oxToint1 - Win32 Debug-------------------- Linking... main.obj : ...

  8. 混合编程:error LNK2001: unresolved external symbol

    Vs2006+matlab2010rb环境: 1:工具-选项-项目解决方案-VC++目录设置include和lib的路径 2:项目-属性-属性配置-链接器-输入-附加依赖项把库的名字添加进去 VIST ...

  9. error LNK2001: unresolved external symbol @__security_check_cookie

    Q:VS2005编译的静态库, 在vc++6.0中连接出现错误 error LNK2001: unresolved external symbol @__security_check_cookie@l ...

随机推荐

  1. Vue-- vue-preview(图片查看器)的使用步骤:

    vue-preview的使用步骤: )下载 )配置:找到配置文件加入: { test: /vue-preview.src.*?js$/, loader: 'babel-loader' }, 在处理ur ...

  2. web前端学习(四)JavaScript学习笔记部分(2)-- JavaScript语法详解

    2.1.Javascript语法-运算符(1) 复数运算符 %取余 ++ -- 赋值运算符 += -= *= /= %= 字符串操作 <!DOCTYPE html> <html la ...

  3. 2013B题碎纸片拼接

    Photo1_1: clear;clc; path='E:\B\附件1\'; files=dir('E:\B\附件1\*.bmp'); % objdir='E:\B\附件1\'; % bgfile=[ ...

  4. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  5. 用JS实线放大镜的效果

    今天花了点时间,复习了下使用原生JS实线放大镜的效果.在制作过程中,也是很到了一些问题,在这里总结下. HTML代码如下: <div id="preview"> < ...

  6. 对快速排序的分析 Quick Sort

    快速排序 快排的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序.通常可选第一个记录为基准 ...

  7. struts1之工作原理

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zkn_CS_DN_2013/article/details/34452341 1.初始化:strut ...

  8. ajax请求 400 Bad Request, 然后就没进后台方法!

    原因可能是 ajax提交表单的data中实体的字段没有值(表单中无值填充的问题) 导致前台就已经报错了! 需要注意的字段类型 double  date  int .. 我就是因为这个double  , ...

  9. JS BOM 窗口中的使用

    1,弹框的种类 2,打开一个新页面 子窗口操作父窗口,打开新窗口显示内容open("opener.html","haha","width=300,he ...

  10. 通过DataWorks数据集成归档日志服务数据至MaxCompute进行离线分析

    通过DataWorks归档日志服务数据至MaxCompute 官方指导文档:https://help.aliyun.com/document_detail/68322.html但是会遇到大家在分区上或 ...