LINK : fatal error LNK1104: 无法打开文件“E:\xxx\Debug\pro_cpp_1.exe;E:\xxxDependence\GLEW\include“

文章讲述了作者在配置glew和glfw时遇到的链接错误,涉及目标路径、输出文件名冲突,以及编译链接过程的误解。最后揭示了链接器附加库目录和include目录的作用,以及编译和链接的正确顺序。
摘要由CSDN通过智能技术生成

配置 glew,glfw遇到的错误,完整错误:

2>E:\app\vs2022\ideSet\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(1389,5): warning MSB8012: TargetPath(E:\Proj\vsProj\pro_cpp_1\Debug\pro_cpp_1.exe) 与 Linker 的 OutputFile 属性值(E:\Proj\vsProj\pro_cpp_1\Dependence\GLEW\include)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
2>E:\app\vs2022\ideSet\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(1391,5): warning MSB8012: TargetName(pro_cpp_1) 与 Linker 的 OutputFile 属性值(include)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
2>LINK : fatal error LNK1104: 无法打开文件“E:\Proj\vsProj\pro_cpp_1\Debug\pro_cpp_1.exe;E:\Proj\vsProj\pro_cpp_1\Dependence\GLEW\include”
2>已完成生成项目“pro_cpp_1.vcxproj”的操作 - 失败。

我就先检查了C/C+±常规-附加包含目录,把glew调整到glfw之前,怀疑是顺序问题
在这里插入图片描述
对链接器也是同样的操作,检查附加库目录
在这里插入图片描述
检查附加依赖项
在这里插入图片描述
都没问题啊,开始怀疑那个错误,首先这是一个链接错误,说明不是没找到 include/GL那个路径,为什么要同时打开exe和include目录呢,exe所在目录没问题,这里如果你了解编译-链接的过程的话,肯定会直接看出问题所在,只不过我一知半解,猜中了,原来是

链接器的输出目录被我改了!

打开一看,果然不止有exe,还有一个include目录,转手删掉include目录,再次执行,按理说问题解决了。

居然还报错!无法找到启动程序,我就奇怪了,那么大个exe放在那里怎么就找不到呢,打开目录再次确认,发现文件类型exe多了一个‘;’,原来是我删除目录的时候少删了一个分号,导致输出目录proj.exe变成了 proj.exe; 文件类型变了,就跑不了了。改正,openGL启动!成功。

那么这编译链接到底是怎么回事呢,再研究一下

编译与链接的顺序及作用如下:

  1. 为什么要先编译:
  • 每个源文件(.c/.cpp)单独进行预处理、语法分析和代码生成。

  • 产生一堆对应的对象文件(.o文件)。

  • 对象文件包含了源文件中定义的所有函数/变量,但符号未解决。

  1. 链接的作用:
  • 将所有对象文件进行连接合成一个可执行程序。

  • 解决对象文件中的外部符号引用,消除重定义等问题。

  • 为符号绑定实际的内存地址。

  • 产生完整可执行文件,包含程序要运行所需的所有代码和数据。

所以:

  • 编译产生对象文件,每个文件各自处理完毕。

  • 链接将对象文件连接汇总,成就可执行整体架构。

  • 编译生成符号,链接解决符号引用,二者协作完成整个过程。

因此,编译先生成各部分,链接后集成整体,这是C/C++标准编译流程。


链接器的附加库目录只是提供了目录,具体需要目录里哪一个需要在附加依赖项塞进去。

include目录包含需要的头文件,头文件调用库文件,lib或者dll,是这么回事。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值