`
csstome
  • 浏览: 1508076 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

终于解决了困扰我至少5个小时的链接错误

阅读更多

今天就要拿出程序来,可偏偏就是编译不过!

链接错误!又见链接错误:

error LNK2001: unresolved external symbol xxxxxxxxxxxxxxxxxx

我遇见这个错误当然不止一次了,想象中不难解决,我按照“定式”逐个确认:被引用的lib已经编译,lib所在目录已正确设置,lib已加入到“Object/library modules”中,被引用的lib和当前工程使用的是相同的“Use run-time library”设置(“Multithreaded DLL”)……

实在没有办法了,我一遍遍的“Rebuild All”,一遍遍地检查各项设置,我知道这样很傻,可又能怎么样呢,我已经束手无策了啊,我只希望能碰到一次好运气,让它链接通过吧!

无论怎么重复,结局是一样的。

也上网搜索了几遍,出现同样问题的倒是不少,但我并未从中找到解决我的问题的答案,哪怕是线索。

后来逐项核对VC项目配置,终于发现了症结所在:在“Ignore libraries”多填了“msvcrt.dll”!(Link - Category:Input)

哦,原来如此,怪不得有那么多C标准库函数都被视为“unresolved external symbol”。

真应了那句老话(是老话吗?不确认),看似非常复杂的问题,往往可以通过非常简单的手段解决。我还要补上半句:找到简单手段的过程也往往非常艰辛!

这又让我想前了前几天在Linux下用GCC编译时遇到的奇怪的问题:编译链接均成功,但编译出的so无法被加载,dlopen()失败,dlerror()返回“找不到符号”之类的东东。它所找不到的符号明明是在某个静态库.a中,况且已经链接通过了呀。系统:Ubuntu6.10,GCC:4.1.2。GCC命令行是:

gcc -shared -L. -I. x.a y.a z.a a.o b.o c.o -o my.so

最终的解决方案实际上这很简单,就是把“-o my.so”往前放,把“x.a y.a z.a”往后放,即改为:

gcc -shared -o my.so -L. -I. a.o b.o c.ox.a y.a z.a

这个问题困扰了我好几天,是在很偶然的机会下才找到了解决办法。

回过去想一下,用第一个命令行链接时,那些静态库.a并没有被编译进so中,用 nm 命令查看也证实了这一点。

我对GCC以及LINUX下编程不太熟悉,不知道GCC的参数前后顺序有没有关系,不知道第一种写法算正确呢,还是非法呢,还是GCC的BUG?

写出这一点,希望能给遇到类似问题的朋友一些启发。

注:上面给出的GCC编译链接命令行是经过精简后的,真实的编译链接命令是在Makefile中由多个宏参数组合而成的,用到了大量的.o和大量的.a,以及其它选项,比这要复杂的多。

分享到:
评论

相关推荐

    收费机常见错误代码

    校准收费机的时钟,至少每三个月进行一次。 了解这些错误代码及其解决方法对于维护食堂收费机的正常运作至关重要。通过排查和修复这些问题,可以确保系统的高效运行,减少用户的困扰,提高食堂管理效率。

    TIA博途wincc仿真运行时提示未安装运行系统的解决办法.docx

    在使用TIA Portal (TIA博途) V15.1进行WINCC项目的开发过程中,用户可能会遇到一个常见问题:当尝试启动WINCC的仿真功能时,在编译完成后并未弹出预期的操作界面,而是收到了一条错误提示——“未安装运行系统”。...

    如何修复Windows更新错误0x80070643

    Windows更新错误0x80070643虽然给部分用户带来了困扰,但通过上述详细的解决方案,大多数情况下都能够得到妥善解决。重要的是,在操作过程中一定要谨慎,特别是在进行磁盘分区调整时,以免造成数据丢失或其他不必要...

    使用iTunes恢复更新iPhone

    在使用iTunes对iPhone、iPad或iPod touch进行恢复或更新时,有时会出现一个令人困扰的问题,即在恢复过程中突然停止,并在iTunes界面显示一个警告,内容为“未能恢复iPhone,发生未知错误”,错误代码通常为1603。...

    System.Data.OleDb.OleDbException: 未指定的错误的完美解决方法

    这个问题常常困扰着数据库开发人员,尤其是在进行大量数据操作或频繁读取时,会导致程序运行出现中断。 首先,这种异常几乎总是与Microsoft Access数据库相关。异常的出现可能是由于多种原因,比如数据库连接没有...

    matlab2008a安装过程出现问题的解决方案

    ### MATLAB 2008a 安装过程出现问题的解决方案 #### 一、引言 MATLAB 是一种广泛应用于科学计算、算法开发以及数据分析的强大工具。然而,在安装过程中可能会遇到各种问题,这些问题往往会给初次接触 MATLAB 的...

    SOCK判断是否联网模块.rar

    5. **错误处理**:源码中应当包含丰富的错误处理代码,以便在发生异常情况时向用户反馈正确的信息。例如,网络中断、无可用网络适配器或者权限问题等。 6. **多平台兼容**:易语言虽然主要在Windows平台上运行,但...

    创意错误状态封面插画素材.zip

    在"压缩包子文件的文件名称列表"中,我们看到的"M_36"可能是一个具体的插画文件名,这表明压缩包内至少有一个名为"M_36"的图像文件,可能是为错误状态设计的插画。在实际应用中,设计师会根据不同的错误类型和用户...

    Canon佳能LBP2900激光打印机驱动 1.00

    5. **错误处理**:如果发生问题,驱动程序会识别错误并提供解决方案,例如,缺墨提示或者纸张堵塞警告。 在提供的压缩包中,"canon_lbp2900_drv100_xp.exe"文件是佳能LBP2900驱动程序的安装程序,适用于Windows XP...

    Win2003打不开https的问题

    5. **更新操作系统**:Windows Server 2003已经非常老旧,可能存在许多已知的安全漏洞。定期应用最新的安全更新和补丁是必要的,以保持系统的安全性和稳定性。 6. **检查TLS版本**:某些现代浏览器不再支持旧版的...

    交换机在锐捷下应用

    通过使用交换机,可以有效避免由Windows自带的Internet连接共享和DHCP服务不稳定带来的困扰,尤其对于XP系统用户和不支持虚拟AP功能的无线网卡。 首先,理解交换机在锐捷环境中的作用。交换机是一种网络设备,用于...

    win7下VS2010、IIS7配置常见问题收集

    ### Win7 下 VS2010 和 IIS7 配置常见问题详解 ... 在 Windows 7 操作系统下安装 Visual...通过以上详细的步骤和解决方案,可以有效地解决 Windows 7 下 VS2010 和 IIS7 的配置问题,提高开发效率,避免不必要的错误和困扰。

    单片机课程设计数码管代码计算器

    单片机课程设计数码管代码计算器是一个针对学习单片机技术的学生或爱好者设计的实用工具。...对于初学者来说,这样的工具是十分有价值的,它有助于理解和实践数码管显示技术,同时也能减少因手动计算错误带来的困扰。

    文件夹快速同步备份专家1.rar

    "文件夹快速同步备份专家1.rar" 提供了一个解决方案,它可能是一个专门设计用于高效、安全地同步和备份文件夹的软件工具。让我们深入探讨这个主题,了解文件同步和备份的基本概念、重要性以及如何实现它们。 文件...

    安装SQL Server 2000群集遇麻烦.pdf

    2. 每台服务器配置至少两块网卡,网络连接分别重命名为“专用网络”和“公用网络”,并手动设置服务器IP地址。 3. 确保主备服务器安装了DNS服务器组件。 4. 主备机成功配置了域环境。 **遇到的问题及解决办法** 1....

    PLSQL12 32位+中文语言包+注册码

    3. **数据库连接**:用户可以轻松连接到多个Oracle数据库实例,进行数据查询、管理与维护。 4. **数据库对象管理**:包括表、视图、索引、存储过程、函数等对象的创建、修改和删除。 5. **数据导入导出**:支持数据...

    U盘助手专家

    标题“U盘助手专家”指的是一个专门针对USB闪存盘(U盘)提供技术支持和解决方案的软件工具。这款软件设计的目的是为了协助用户更高效、安全地管理和使用他们的U盘,尤其是在处理常见问题时,如无法正常读取、拔插时...

    学习Worshop的常见问题以及精华文章推荐

    5. **数据库连接**:默认的数据库连接信息用于连接Pointbase数据库。你可以自行查找工具来查看和管理Pointbase。至于是否推荐使用JavaControl作为开发模式,这取决于具体项目需求,建议查阅dev2dev上的最佳实践文档...

    redis中文客户端

    Redis中文客户端是为了解决 Redis 数据库在中文环境下的使用需求而设计的工具,它提供了友好的用户界面,使得操作 Redis 数据库对于中文用户来说更加便捷。本文将深入探讨 Redis 中文客户端的相关知识点,包括其功能...

    K3帮助_安装配置指南

    在安装过程中,可能会遇到各种问题,如硬件不兼容、网络连接问题、数据库配置错误等。指南中的常见问题分析与解决部分提供了这些问题的解答,帮助用户排除故障。 总的来说,【K3帮助_安装配置指南】是一份详尽的...

Global site tag (gtag.js) - Google Analytics