error LNK2001: unresolved external symbol __imp___rt_sdiv
这个问题搞了我 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
error LNK2001: unresolved external symbol __imp___rt_sdiv的更多相关文章
- 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版本的代码,但 ...
- [异常] VC6.0 error LNK2001: unresolved external symbol _main解决办法
来自:http://www.douban.com/note/65638800/ 学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说 ...
- VC6.0 error LNK2001: unresolved external symbol _main解决办法
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过.产生连接错误的原因非常多,尤其LNK2001错误 ...
- (转载)浅析error LNK2001: unresolved external symbol "public: __thisc...
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于 编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过.产生连接错误的原因非常多 ...
- MASMPlus编译出错:error LNK2001: unresolved external symbol _WinMainCRTStartup
初学汇编,感觉很多不懂.不过那也是,如果懂了的话就不用学了,从无到有学习一门编程语言果然不是那么容易的一件事. 学习汇编总得要有一款汇编软件才行,没理由只是使用Windows自带的DEBUG.于是上了 ...
- error LNK2001: unresolved external symbol _main
想运行一个网上下载的opengl离屏渲染(渲染到纹理FBO)的程序,然后一直报错 error LNK2001: unresolved external symbol _main 解决了一下午终于弄明白 ...
- VC6.0 error LNK2001: unresolved external symbol __imp__ntohl@4
--------------------Configuration: oxToint1 - Win32 Debug-------------------- Linking... main.obj : ...
- 混合编程:error LNK2001: unresolved external symbol
Vs2006+matlab2010rb环境: 1:工具-选项-项目解决方案-VC++目录设置include和lib的路径 2:项目-属性-属性配置-链接器-输入-附加依赖项把库的名字添加进去 VIST ...
- error LNK2001: unresolved external symbol @__security_check_cookie
Q:VS2005编译的静态库, 在vc++6.0中连接出现错误 error LNK2001: unresolved external symbol @__security_check_cookie@l ...
随机推荐
- mybatis中使用包装对象
在实际的应用中,很多时候我们需要的查询条件都是一个综合的查询条件,因此我们需要对已经存在的实体进行再一次的包装,以方便我们进行查询操作,于是包装对象的作用就很明显了,在这里我举一个简单的例子 1.首先 ...
- npm ci命令比npm installer命令快2至10倍
npm 5.7.1的发布给我们带了一系列新的功能. 其中我最喜欢的就是npm ci命令了. npm ci命令 1.npm ci命令只根据lock-file去下载node_modules. 如果你的pa ...
- 初探 jQuery
为什么要学习jQuery? 使用javascript开发过程中,有许多的缺点: 1. 查找元素的方法太少,麻烦. 2. 遍历伪数组很麻烦,通常要嵌套一大堆的for循环. 3. 有兼容性问题. 4. 想 ...
- 软工作业——Alpha版本第一周小结
姓名 学号 周前计划安排 每周实际工作记录 自我打分 zxl 061425 1.进行任务分析2.进行任务分配 1.对任务进行了初步的划分,但还为进行给模块间的联系2.给每人分配了任务3.负责扫码签到功 ...
- JAVA的一次编译,到处执行,你知道多少?
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wangyongxia921/article/details/28117155 一.对AVA的迷茫 ...
- adb安装apk包时提示:device unauthorized
adb install apk时提示device unauthorized,手机上还没出现usb是否允许调试的询问弹框: 解决方法: 1.cmd输入:adb kill-server,点击回车键 2.c ...
- 第三十一讲:UML类图(上)
类名 成员变量:属性 成员函数:方法 访问权限-属性名-属性的类型 访问权限-方法名-返回值,还可以传递参数列表. 继承类的类图 JAVA里面类的访问权限只有两种:package(默认的访问权限)和p ...
- Sentinel 1.5.0 正式发布,引入 Reactive 支持
近日,流控降级组件 Sentinel 的又一个里程碑版本 1.5.0 正式发布. 该版本引入 Reactive 的支持,并提供多项新特性与改进.从 1.5.0 版本开始,Sentinel 仅支持 JD ...
- Python接口自动化(二)接口开发
django 配置开发环境 相关命令 python manage.py runserver 127.0.0.1:8000在指定的地址和端口启动服务 python manage.py startapp ...
- iOS 小 Tip:优化侧滑返回与 ScrollView 的兼容性
http://www.cocoachina.com/ios/20150909/13369.html 作者:@周楷雯Kevin 授权本站转载. 倘若在 ViewController 中添加了一个 Tab ...