| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1965 人关注过本帖
标题:总结一些思考的问题!!!大家一起讨论!
只看楼主 加入收藏
boshido
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-3-7
收藏
 问题点数:0 回复次数:17 
总结一些思考的问题!!!大家一起讨论!
感谢大家对于在下的LinkError一帖的积极讨论和指教,论坛的氛围很积极,我也将一些问题的总结与大家分享讨论,还望牛人积极参与意见。谢谢

很多编写代码的初学者都是从单线程,单文件开始的。比如在一个文件中声明子函数,主函数,结构体等等,大家都调试过。

之后开始写多个文件链接,实现自己的库和函数包。这时问题就来了,以前老谭的书上似乎没有说过啊?于是就到处看一些别人的代码,借鉴,模仿,学习,最终自己掌握。

我周围的人都是如此,不知其他高手牛X有没有更好的方法,如果有大家一起来说说。

过去,我也认为我掌握了。因为以前用TC和VC等等,都可行。直到最近,换了个电脑,换了个编译平台,问题出现了。如我在LinkError一问中说描述的,编译通过,可是文件链接有问题。以前没有遇到过,现在还真是有些措手不及。

后来下载了一个TC30,跑一遍,仍然是编译通过,运行时出现LinkError:Undefined symbol _show
show()是我在其他文件show.c中写的一个函数,在show.h中有声明,void show(void);而且在同一个目录下面,究竟问题出在哪里呢?

如果是编译器设置的问题,对于编译器,包含文件编译时,有些什么需要的设置没有。我现在是按照默认的设置。C的库目录、Include目录等目录设置全都检查过了。可是编译通过,运行链接有问题这其中到底会是哪些地方没顾忌到呢?

如果是语法的问题,文件包含的标准过程和声明规范是什么样的呢?

请大家说说谢谢。

现在我就先说说我的包含过程吧。
1、将void show(void) 函数写入文件show.c保存
2、建立show.h。声明 void show(void);
3、在main.c中,用预编译命令#include "show.h"将show.h包含进去
4、编译通过
5、运行

就是这么一个流程,可是在第5步出现了问题总是出现Undefined Symbol _show

望大家积极讨论,不吝赐教!谢谢。
搜索更多相关主题的帖子: 思考 
2008-07-03 09:43
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
//show.h
#ifndef SHOW_H
#define SHOW_H
extern void show(void);
#endif
//show.c
#include "show.h"
void show(void)
{
   .....
}

//main.c
#include "show.h"
int main(void)
{
    return 0;
}

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-03 09:51
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
如果linkerror,那么是平台的一些问题.
我以前在devc就碰到过.
如果你是用devc,那么你不要一个一个文件地建,
而是先建立一个工程文件,然后添加相关的.h or .c

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-03 09:56
boshido
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-3-7
收藏
得分:0 
已经如ioriliao兄做了修改,
#include <stdio.h>
#include "show.h"

void main()
{
 show();
}

用Broland C++编译无错,运行时出现
Undefined Symbol _show in module MAIN.c
看来问题还是存在。还需要探讨和思考!
2008-07-03 10:08
boshido
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-3-7
收藏
得分:0 
另外
#ifndef SHOW_H
#define SHOW_H
中,SHOW_H从没有用过,这两个宏定义起什么作用呢?
2008-07-03 10:13
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
你下载个devc++平台回来吧
borland的东西对初学者不友好.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-03 10:30
boshido
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2006-3-7
收藏
得分:0 
感谢您热情的回复。
2008-07-03 10:33
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
如果像你这种帖子我是很热情回复的,那些作业帖就不同了.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-03 10:34
sglancer
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-1
收藏
得分:0 
你编译和link的命令行是什么?

下面是那3个文件, 我用gcc编译,命令行是
gcc -o main.exe show.c main.c
运行main.exe 没有问题

//show.h
#ifndef SHOW_H
#define SHOW_H
extern void show(void);
#endif
//show.c
#include "show.h"
void show(void)
{
   printf("hello world!\n");
}

//main.c
#include "show.h"
int main(void)
{
    show();
    return 0;
}
2008-07-03 11:26
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
呵呵...楼主应该不是用命令行编译的.
如果是的话肯定不会出现link error.
而其用的borlandc平台又没有智能link(估计的^_^);
所以error.所以我叫其下载个友好点的平台回来.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-07-03 11:31
快速回复:总结一些思考的问题!!!大家一起讨论!
数据加载中...
 
   



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

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