Visual Studio 2019中跨C++项目调用文件遇LNK2019链接错误的解决方法(不导入源文件)
解决Visual Studio 2019中C++项目引用的LNK2019链接错误
这个LNK2019错误其实很好解决——问题出在你把Game项目设置成了生成可执行文件(.exe),而VS里的可执行项目是没办法被另一个可执行项目直接链接引用的,链接器根本没法从exe里提取你需要的类方法实现。咱们不用把Game的源文件复制到Tester里,只要调整Game项目的输出类型就行,给你两种方案:
方案1:转成静态库(最省心的选择)
- 在解决方案资源管理器里右键Game项目,打开属性面板
- 左侧导航到「配置属性 → 常规」
- 找到「项目默认值」下的「配置类型」,把下拉框从「应用程序(.exe)」改成「静态库(.lib)」
- 点「确定」保存,然后右键整个解决方案选「重新生成解决方案」
改完之后,Game会生成一个.lib静态库文件,Tester项目因为已经添加了Game的引用,链接器会自动找到这个库并把里面的符号(也就是Foo、Foo2的方法实现)链接进去,LNK2019错误就消失了。
方案2:转成动态库(适合需要动态加载的场景)
如果之后你需要动态加载Game的代码,就选动态库:
- 同样右键Game项目打开属性,把配置类型改成「动态库(.dll)」
- 额外要做的是给Game的类加导出声明,不然外部项目找不到它的符号:在Foo.h和Foo2.h的类声明前加上
__declspec(dllexport),比如:class __declspec(dllexport) Foo { // 你的类成员和方法 }; class __declspec(dllexport) Foo2 { // 你的类成员和方法 }; - 重新生成解决方案,Tester就能正常链接Game的动态库了。
最后再确认下Tester的引用设置没问题:
- 右键Tester项目 → 「项目依赖」,确保勾选了Game
- 右键Tester项目 → 「添加 → 引用」,确认已经加了Game的引用
这样就完全不用导入Game的源文件,Tester就能用Game里的所有类和方法啦。
内容的提问来源于stack exchange,提问作者Stefan Meller
相关产品推荐
相关产品推荐

