C++日常记录(环境配置篇)

1 头文件不存在

  1.1 #include <corecrt.h>  C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt

  1.2 #include <stddef.h>   C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt

  1.3 #include <windows.h>  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include

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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是C++安卓NDK环境配置的步骤: 1. 下载并安装Android Studio,下载地址:https://developer.android.com/studio 2. 安装NDK,打开Android Studio,点击File -> Settings -> Appearance & Behavior -> System Settings -> Android SDK,在SDK Platforms选项卡中选择Show Package Details,勾选NDK(Side by side)并点击Apply按钮进行安装。 3. 创建一个新的Android Studio项目,选择C++模板。 4. 在项目的app目录下创建一个jni目录,并在其中创建一个名为Android.mk的文件和一个名为Application.mk的文件。 5. 在Android.mk文件中添加以下内容: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mymodule LOCAL_SRC_FILES := mysource.cpp include $(BUILD_SHARED_LIBRARY) ``` 其中,LOCAL_MODULE是你的模块名称,LOCAL_SRC_FILES是你的源文件名称。 6. 在Application.mk文件中添加以下内容: ``` APP_ABI := all APP_PLATFORM := android-14 ``` 其中,APP_ABI指定了你要编译的CPU架构,all表示编译所有架构;APP_PLATFORM指定了你要编译的Android平台版本。 7. 在build.gradle文件中添加以下内容: ``` externalNativeBuild { cmake { path "CMakeLists.txt" } } ``` 8. 在CMakeLists.txt文件中添加以下内容: ``` cmake_minimum_required(VERSION 3.4.1) add_library( mymodule SHARED mysource.cpp) target_link_libraries( mymodule log) ``` 其中,mysource.cpp是你的源文件名称。 9. 在Android Studio中点击Build -> Make Project进行编译。 10. 编译完成后,在app/build/intermediates/cmake/debug/obj目录下可以找到编译好的库文件。 希望这些步骤能够帮助你成功配置C++安卓NDK环境。如果你还有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值