一个dllimport 导致的链接错误LNK2019

解决Cocos2d-X工程中DLL导入导致的链接错误问题
本文详细介绍了在使用Cocos2d-X编写游戏时遇到DLL导入错误的问题,以及如何通过修改代码和配置来解决这个问题。通过分析错误日志,我们了解到错误源于不正确的DLL导入声明,并提供了有效的解决方案。

在exe工程中编写的类使用 了class CC_DLL MUBianseAction : public ActionInterval

CC_DLL 声明,会导致下面的链接错误,去掉这个申明

只有在导入外部工程的dll符号或者类的时候才使用 CC_DLL的申明

错误 31 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) const MUBianseAction::`vftable'{for `cocos2d::Clonable'}" (__imp_??_7MUBianseAction@@6BClonable@cocos2d@@@),该符号在函数 "public: __thiscall MUBianseAction::MUBianseAction(void)" (??0MUBianseAction@@QAE@XZ) 中被引用 F:\vcproject\3dmu\proj.win32\MUBianseAction.obj 3dmu

错误 30 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) const MUBianseAction::`vftable'{for `cocos2d::Ref'}" (__imp_??_7MUBianseAction@@6BRef@cocos2d@@@),该符号在函数 "public: __thiscall MUBianseAction::MUBianseAction(void)" (??0MUBianseAction@@QAE@XZ) 中被引用 F:\vcproject\3dmu\proj.win32\MUBianseAction.obj 3dmu
### 关于Visual Studio 2022 中 LNK2019 错误的解决方案 `LNK2019: unresolved external symbol` 是一种常见的链接错误,表示编译器无法找到某个函数或变量的具体实现。这种错误通常发生在以下几个场景: #### 场景一:缺少入口点 `main` 函数 如果项目是一个控制台应用程序,而未定义 `main` 或其他入口点函数,则会触发此错误[^2]。 ```cpp // 正确的 main 函数声明方式 int main(int argc, char *argv[]) { return 0; } ``` #### 场景二:静态库或动态库依赖缺失 当程序调用了某些来自外部库的函数,但这些库未被正确链接到项目中时,也会引发该错误。例如,在使用 DLL 的情况下,类型不匹配可能导致此类问题[^4]。 ```cpp // 示例:类型不匹配导致 LNK2019 __declspec(dllimport) void func(unsigned short*); int main() { func(0); // 如果传递参数类型不符则报错 } ``` 确保导入导出一致以及数据类型的兼容性非常重要。 #### 场景三:多线程运行时库配置不当 在特定条件下,“MT”(Multi-threaded)模式下的代码生成可能会与 `_DLL` 宏发生冲突,从而引起类似的链接失败情况[^3]。此时可以考虑移除自定义宏 `_DLL` 并重新设置项目的属性页来解决问题。 具体操作如下: - 打开 **Project Properties** - 导航至 **C/C++ -> Code Generation** - 将 Runtime Library 设置为 `/MDd`(对于调试版本)/`/MD`(对于发布版本) 通过上述调整能够有效规避由运行时期望差异所引起的连接难题。 另外还需注意的是,有时即使解决了直接可见的问题源码层面仍可能存在间接引用链路断裂的情况;因此建议全面审查整个工程结构及其相互关系以彻底消除隐患。 ```python # Python示例仅用于说明逻辑流程而非实际修复方法 def check_project(): if not has_entry_point(): add_default_main() elif missing_libraries(): include_required_libs() adjust_runtime_settings() check_project() ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值