| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1508 人关注过本帖
标题:为什么编译没错,运行时总是出现LinkError?
只看楼主 加入收藏
xcgoner
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-6
收藏
得分:0 
这个嘛,其实是个很简单的问题,看你的样子就知道不是在写一个工程,大概是用tc/bc/Dev C之类的吧,不是工程的话你必然只编译运行了main.c一个文件,且其中只调用了一个show.h,而没有调用show.c是吧?不是工程的话他是不会把这两个文件连接到一起的噢。。。。。。所以把程序改成这样:
//main.c

#include <stdio.h>
#include "show.h"
void main(void)
{
show();
}

//=============================================


//show.h
#include <stdio.h>

void show(void)

void show(void)
{
printf("\nLink has been established.\n");
}
//================================================
不要show.c了,把定义全写在头文件里,顺便提一下,只有一句话的函数最好用#define宏定义来写,效率跟高噢。。。。。。
2008-07-06 14:20
coming
Rank: 1
等 级:新手上路
帖 子:244
专家分:0
注 册:2008-4-20
收藏
得分:0 
重建一个工程试试行不行,我有的时候写程序,开始还好好的,改改虽然没有错了,就老是显示连接错误,但是我重建了一个就好了,你试试吧
2008-07-06 23:28
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
[bo][un]flyue[/un] 在 2008-7-2 14:17 的发言:[/bo]

哎,LZ这个代码不是你自己写的吧?是不是按书上写的?
你看//main.c和//show.h是告诉你这片代码要放在不同的文件里地,你如果放在同一个文件,那当然会错误拉
void show(void)
这里少了“;”号


flyue你经验不足啊……会出这样的错误显然是因为放在了多个文件内嘛……

如果是VC6,检查是不是所有的文件都已加到工程中,这一点很重要!!
如果是命令行,参考下面的语句:

VC编译器:
cl.exe /omain.exe main.c show.c show.h

GCC编译器:
gcc.exe -omain.exe main.c show.c show.h

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-06 23:56
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
[bo][un]xcgoner[/un] 在 2008-7-6 14:20 的发言:[/bo]

这个嘛,其实是个很简单的问题,看你的样子就知道不是在写一个工程,大概是用tc/bc/Dev C之类的吧,不是工程的话你必然只编译运行了main.c一个文件,且其中只调用了一个show.h,而没有调用show.c是吧?不是工程的话他 ...


C++可以这样,C这样做会演变成一场灾难……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-06 23:56
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
[bo][un]StarWing83[/un] 在 2008-7-6 23:56 的发言:[/bo]
如果是VC6,检查是不是所有的文件都已加到工程中,这一点很重要!!


没必要建工程的,夸张了,
就和一般的文件一样的编译就可以了。
2008-07-07 09:25
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:这样,就只能编译一个文件而已,多个文件,必须建立工程……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-07 13:07
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
[bo][un]StarWing83[/un] 在 2008-7-7 13:07 的发言:[/bo]

LS:这样,就只能编译一个文件而已,多个文件,必须建立工程……


你自己试试吧,下面是3个文件,show.h, show.cpp, main.cpp, 放在同一个文件夹下,不用建立工程,看看能不能编译,运行。

// File: show.h
#ifndef SHOW_H
#define SHOW_H

#include <stdio.h>

extern void show(void);

#endif

// File: show.cpp
#include "show.h"

void show(void)
{
    printf("Hello World!\n");
}

// File: main.cpp
#include "show.h"

int main(void)
{
    show();
    return 0;
}
2008-07-07 13:12
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-07-07 13:27
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
不用VC6,主要是Vista下面用VC6很麻烦,还必须自己设置路径……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-07 14:29
boshido
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-3-7
收藏
得分:0 
是这个道理,其实show.c里面还有大量代码,这里只是简化了。工程也建立了。是不是需要在默认目录下编译呢?
2008-07-09 13:21
快速回复:为什么编译没错,运行时总是出现LinkError?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015189 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved