重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言无法定位的外部函数 c语言无法定位的外部函数怎么办

c语言无法解析的外部符号?

请将schoolwork.c这个源文件添加入工程里,否则根本不会编译到这个文件,只会编译"源.cpp",然而"源.cpp"这个文件并没有main函数。

在北关等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、网站制作 网站设计制作按需定制设计,公司网站建设,企业网站建设,品牌网站建设,全网营销推广,成都外贸网站制作,北关网站建设费用合理。

添加方法:

右键点击“源文件”,在弹出菜单中选择“添加”,在下级菜单中选择“现有项”,此时出现文件浏览对话框

然后找到schoolwork.c,此后“源文件”这一栏里会出现schoolwork.c

再进行编译即可。

C语言中显示无法解析的外部命令?

这是因为c和c++混编带来的问题。

1,问题根源:c++是支持类和名字空间,函数重载等高级技巧的。以函数重载为例:

int Add(int a, int b)

int Add(int a, int b, int c)

这意味着不同的函数有同样的名字(你写的,都叫Add),但是同样的名字会带来混淆,所以使用了一种叫“名字毁坏”的技术,不同的编译器有不同的毁坏规则,只要能实现区分就好。

所以,经过c++编译器的处理,你的Add名字已经面目全非,比如我这里叫:

错误 LNK2019 无法解析的外部符号 "int __fastcall Add(int,int)" (?Add@@YIHHH@Z),函数 _main 中引用了该符号。

到这,都没什么,只不过名字变了一下,只要编译器能处理正确就好。

但是,重点来了,你放了一个c文件进去,c语言,是不支持这些高级玩意儿的,名字也不会毁坏,这样,一个毁坏一个还是原名,得,两下对不上了。

2,解决办法

解决办法也是模式化的,当你声明的变量或者函数在c文件实现的时候,在h文件里声明的时候,用这样的结构包含起来,无论有多少个函数,都可以放在一起。

#ifdef __cplusplus

extern "C" {

#endif

int Add(int, int);

//其他声明

#ifdef __cplusplus

}

#endif

再编译就不会出现Link错误了。

头文件全文如下:

#pragma once

#ifdef __cplusplus

extern "C" {

#endif

int Add(int, int);

#ifdef __cplusplus

}

#endif

用c语言编程序,遇到无法解析的外部符号,求解决方法

使用cl编译的时候,不会自动帮你链接常用的系统库,所以,需要你手动指定需要的库文件。指定库文件时,可以使用参数/link 库文件,也可以直接写库文件名。

MessageBox函数族(编译器会根据字符集自动判断是使用后缀是A还是W的函数)在库文件User32.lib中,加上就行了,命令行:

cl G:\1.c User32.lib

注意我的源文件是在G盘下的,内容和你的一样。编译结果:

c语言外部函数无法成功运行为什么

你用VS2008吧,用它编译的话,你这个能成功!

我问了一位高手,

讲的是:“VC编译器在编译时不默认连接math.h函数”

它不属于C运行库,所以没有默认链接

后来用了VS2008,发现成功了。


网页名称:c语言无法定位的外部函数 c语言无法定位的外部函数怎么办
转载注明:http://cqcxhl.cn/article/hjhhgd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP