error LNK2019: unresolved external symbol的三种解决办法

本文介绍了解决VS编译时出现的LNK2019未解析外部符号错误的方法。通过调整libcocos2d.lib中的方法声明,加入CC_DLL标记并重新构建,成功解决了libluacocos2d在整体构建时遇到的问题。
来源于:[url]http://coka.popcat.net/2011/11/error-lnk2019-unresolved-external-symbol.html[/url]

比较少用windows,最近使用vs遇到一个情况,有一个方法定义在了libcocos2d中,在libluacocos2d里引用,单独build libluacocos2d没问题,但是build整个方案就会报error LNK2019: unresolved external symbol的情况,找到这个宝岛博客才终于理顺是怎么回事

我的libcocos2d是打包成dll方式的,排错的主要方法,就是把libcocos2d.lib用记事本打开,直接搜方法名,发现没找到,原来输出为dll的项目,需要在要暴露的方法名前面,加一个CC_DLL,rebuild,完成,详见来源的网址
error LNK2019错误表明链接器在链接过程中找不到某个符号的定义。以下是一些常见的解决方法: ### 检查函数或符号是否定义 确保所有被引用的函数、类构造函数、析构函数等都有对应的定义。例如,若出现如 “unresolved external symbol _MappFree@4 referenced in function _main” 这样的错误,要检查 `MappFree` 函数是否在代码里被正确定义。若像 “unresolved external symbol "public: __thiscall CircList::CircList(int)"” 这类错误,需确认 `CircList` 类的构造函数是否有定义[^1][^3]。 ### 检查库文件链接 - **确认库文件存在**:若使用了外部库,要保证这些库文件确实存在于指定的路径中。 - **正确配置库文件路径**:在项目设置里,确保已经正确配置了库文件的搜索路径。 - **添加库文件到项目**:在项目设置里,将需要的库文件添加到链接器的输入列表中。 ### 检查项目配置 - **检查编译选项**:确保编译选项(如字符集、运行时库等)在整个项目中保持一致。不一致的编译选项可能会导致链接错误。 - **检查项目类型**:确保项目类型(如控制台应用程序、Windows 应用程序等)与代码匹配。例如,若项目是控制台应用程序,却缺少 `main` 函数,就会出现 “unresolved external symbol main” 错误。一个可能的原因是项目里面没有 `main()` 函数[^4]。 ### 检查头文件包含 确保所有必要的头文件都被正确包含,并且头文件中的声明与实现文件中的定义一致。若头文件中的声明和实现文件中的定义不匹配,也会引发链接错误。 ### 清理和重新构建项目 有时,旧的中间文件可能会导致链接错误。可以尝试清理项目(删除所有中间文件),然后重新构建项目。 ### 示例代码问题分析 以下以 “unresolved external symbol _MappFree@4 referenced in function _main” 为例,可能的代码问题及解决办法: ```cpp // 假设这是 main.cpp 文件 #include <iostream> // 这里调用了 MappFree 函数,但没有包含对应的头文件,也没有定义该函数 int main() { // 调用 MappFree 函数 MappFree(0); return 0; } // 解决办法: // 1. 若 MappFree 是自定义函数,需要在某个 .cpp 文件中定义该函数 // 例如,创建一个 mappfree.cpp 文件 // mappfree.cpp #include <iostream> void MappFree(int param) { std::cout << "MappFree called with param: " << param << std::endl; } // 2. 若 MappFree 是外部库中的函数,需要包含对应的头文件,并链接相应的库文件 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值