zoukankan      html  css  js  c++  java
  • C++日常记录(环境配置篇)

    1 头文件不存在

      1.1 #include <corecrt.h>  C:Program Files (x86)Windows Kits10Include10.0.10150.0ucrt

      1.2 #include <stddef.h>   C:Program Files (x86)Windows Kits10Include10.0.10150.0ucrt

      1.3 #include <windows.h>  C:Program Files (x86)Microsoft SDKsWindowsv7.1AInclude

    2 LINK

      2.1  LINK : fatal error LNK1104: 无法打开文件“gdi32.lib”  链接器--输入(注意:.lib 与 .lib之间要用英文的分号隔开)

      2.2  判断该lib名称有没有输错

      2.3  VC++目录  -->>  库目录  -->>  路径是否存在

      2.4  fatal error LNK1104: 无法打开文件“GCBase_MDd_VC120_v3_1.lib”   C/C++  预处理器添加:GENICAM_NO_AUTO_IMPLIB

          请见链接: https://github.com/roboception/rc_genicam_api/issues/7

     3 引用目录

      3.1  $(SolutionDir):解决方案的目录,及.sln所在目录   $(SolutionDir)..表示上一个目录   $(SolutionDir).表示sln当前目录

    4 断点不起作用

      4.1 确认配置

        4.2  清理项目、重新生成、F5运行

    5 C/C++属性页不存在

    用VS2015新建的C++空项目属性页没有C/C++属性,需要写些代码,运行下,再次打开属性页,会看到C/C++属性选项

    6 dll、lib、exe、obj的区别和联系  转自 https://blog.csdn.net/beautifularea/article/details/6111666

    lib是和dll对应的。   

    lib是静态的库文件,dll是动态的库文件。   

    所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。   

    所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。   

    lib,   dll,   exe都算是最终的目标文件,是最终产物。而c/c++属于源代码。源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目标文件。比如说一个exe需要很多的cpp文件生成。而编译器一次只能编译一个cpp文件。这样编译器编译好一个cpp以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要的exe,应该说缺少任意一个obj都会导致exe的链接失败。

    1.obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。   

    2.理论上可以,但实际中通常用lib。   

    3.编译器会默认链接一些常用的库,其它的需要你自己指定。

     lib和DLL的区别

    (1)lib是编译时需要的,dll是运行时需要的。 

    如果要完成源代码的编译,有lib就够了。 

    如果也使动态连接的程序运行起来,有dll就够了。 

    在开发和调试阶段,当然最好都有。 

    (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 

    (3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。

    https://blog.csdn.net/weixin_39308337/article/details/108427979

    静态库:函数和数据被编译进一个二进制文件(通常扩展名为.lib),静态库实际上是在链接时被链接到EXE的,库本身不需要与可执行文件一起发行。

    动态库:用VC++创建的动态库包含两个文件,一个lib文件和一个dll文件,这个lib文件就是引入库,不是静态库,引入库有时也叫输入库或导入库。
    注:windows操作系统下动态库和运行时库的扩展名都是.dll,COM组件的扩展名也是.dll,动态库的引入库和静态库的扩展名都是.lib。

    7 输出路径

    VS2015 下C++程序,一个解决方案下的所有项目生成输出的文件(如exe、dll)都统一放在一个文件夹下。 即$(OutDir)$(TargetName)$(TargetExt)

     

     

     

     

     

     

  • 相关阅读:
    idea资源导出失败的问题
    计算机的运算方法
    ajax返回json字符串,前端显示中文乱码问题解决
    解决xml编码问题:1 字节的 UTF8 序列的字节 1 无效
    【转】erlang四种监控策略one_for_one、one_for_all、simple_one_for_one、rest_for_one
    erlang:register and global:register_name
    【转】重点介绍erlang的global模块
    memset函数用法
    简单实现SQL Server 2012高可用性组
    《mysql必知必会》读书笔记游标的使用
  • 原文地址:https://www.cnblogs.com/yangmengke2018/p/14309150.html
Copyright © 2011-2022 走看看