关于各种头文件无法加载问题:无法加载源文件:stdio.h windows.h 等等

本文解决了一个常见的编程问题:SDK版本不匹配导致的错误。通过调整项目属性中的windowSDK版本,可以轻松解决运行他人程序时遇到的版本冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上搜索被人给了一堆答案,各种花里胡哨的方法,反正我是没试成功。

经同学提点,其实原因很简单,就是SDK版本不对,大多数出现在直接在自己的电脑上运行别人的程序时出现。

解决方法:

项目->属性->window SDK 版本 换一个,一般除了你当前使用的版本,都会给你提供另一个选项,那就是适合的版本。

OK,解决!!

任务描述 在当前目录下存在两个子目录: inc 和 src , inc 下面有static_develop.h、static_entry.h和share_hal.h, src 下面有static_develop.c、static_entry.c、share_hal.c和main.c。 本关任务: 利用static_develop.c和static_entry.c直接生成libstatic.a; 利用share_hal.c和libstatic.a生成依赖静态库libstatic.a的动态库libsharedhal.so; 利用main.c和libstatic.a生成依赖libstatic.a的可执行文件main。 相关知识 Linux 系统中可执行文件或者动态库在运行的时候,往往会依赖别的静态库和动态库,这种方式我们将其称之为依赖库。依赖库在整个 Linux 项目中非常常见,稍微复杂的项目不可能只由几个文件组成,一旦包含的文件和模块多了之后,就需要将单独、独立的模块编译成静态库或者动态库。 本关主要单独讲解依赖静态库的情形,依赖动态库的情形会放在下一关。 依赖静态库的目标主要有两个: 可执行文件:可执行文件依赖的静态库都比较常见。 当一个可执行文件依赖静态库时,在编译的时候需要链接静态库,在可执行文件运行的时候,不需要将静态库放在指定的目录下,直接运行可执行文件即可。 动态库:动态库依赖静态库的情形略微少见,但是也是一种编译手段,比如在 Linux 底层驱动和文件系统中,会大量使用静态库。 当一个动态库依赖静态库时,在编译的时候需要链接静态库。同时,这个动态库在被别的可执行文件加载的时候,即使没有静态库,也一样可以运行或者加载。 源码文件说明 源码文件涉及到以下几个部分: 静态库的源文件staticsrc.c和头文件staticsrc.h; 动态库的源文件sharelib.c; 可执行文件的源文件execute.c。 文件名:staticsrc.h #ifndef _STATIC_SRC_H_ #define _STATIC_SRC_H_ int staticfunc(void); #endif/*_STATIC_SRC_H_*/) 文件名:staticsrc.c #include <stdio.h> #include "staticsrc.h" int staticfunc(void) { printf("Enter %s ", __FUNCTION__); printf("Exit %s ", __FUNCTION__); return 0; } 文件名:sharelib.c #include <stdio.h> #include "staticsrc.h" int sharefunc(void) { printf("Enter %s ", __FUNCTION__); staticfunc(); printf("Exit %s ", __FUNCTION__); return 0; } 文件名:execute.c #include <stdio.h> #include "staticsrc.h" int main(void) { printf("Enter %s ", __FUNCTION__); staticfunc(); printf("Exit %s ", __FUNCTION__); return 0; } 首先需要编译静态库libStaicFunc.a,如果这里编译的静态库需要提供给动态库使用,则编译静态库的方式需要有所调整: 用**-fPIC**生成.o文件: gcc staticsrc.c -fPIC-c; 生成静态库:ar crv libStaicFunc.a staticsrc.o 指定静态库的路径 当指定静态库的路径时,使用-L$(dir)的格式。比如静态库libtest.a在当前目录下的 library 下,核心语句为-Llibrary -ltest。 在 Makefile 编写中,为了方便后来者阅读,我们一般讲各种路径或者依赖关系采用变量的方式来定义。例如: libdir=library/ LIBRARYDIR=-L$(libdir) LIBSENTECE=$(LIBRARYDIR) -ltest 编译依赖静态库的可执行文件 我们将可执行文件取名为 executeProcess 。如果源码文件不依赖静态库中的符号(接口 staticfunc ),其核心编译语句为: gcc execute.c -o executeProcess 但是这里依赖静态库,则需要用到指定静态库路径,并链接静态库。核心语句为: gcc execute.c -o execute
最新发布
03-22
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值