当前位置:  技术问答>linux和unix

关于GNU编译和连接?在线等!一经解决立即结贴!

    来源: 互联网  发布时间:2015-09-15

    本文导语:  我有文件a.h,b.s,c.c,d.c,e.c。编译能通过,但连接时总说我的fun1,fun2,fun3未定义。 后来我才发现连接时如果a.h中声明的函数它就只在a.c中去找其函数定义。请问我如何让编译器到 我对应的文件中找到对应的函数定义啊?...

我有文件a.h,b.s,c.c,d.c,e.c。编译能通过,但连接时总说我的fun1,fun2,fun3未定义。
后来我才发现连接时如果a.h中声明的函数它就只在a.c中去找其函数定义。请问我如何让编译器到
我对应的文件中找到对应的函数定义啊?或者说请问我什么方法可以在a.h中声明函数而在其它c文件和
汇编文件中找到对应的函数定义啊?

a.h内容:
/*我想把所有函数声明都放在这个头文件中*/
void fun1(void);
void fun2(void);
void fun3(void);

b.s内容:
.extern fun3
.global fun2/*fun2的定义*/
.func fun2
fun2:
.endfunc

c.c内容
#include "a.h"
void fun1()/*fun1的定义*/
{
}

d.c内容
#include "a.h"
void fun3()/*fun3的定义*/
{
}
e.c内容
#include "a.h"
int main()
{
  fun1();
  fun2();
  fun3();
}

|
看了一下,应该是你b.s有问题,可能是你汇编代码有问题,要是用C来实现,完全OK。
你a.h, c.c ,b.c , e.c得用法没问题(建议头文件还是使用#ifndef 机制)

你说“如果a.h中声明的函数它就只在a.c中去找其函数定义”,我不知道你是怎么推断的。
但实事不是这样的,gcc在链接得时候,会自动得在你指定编译的每个文件中去找对应函数的定义。

|
我试了,楼主最开始的代码在Rh Linux 9 下编译没问题,是不是编译器的版本不支持。

|
要么你把b.s里的内容放到a.h中去,要么你在a.c或者a.h中加上 #include “b.s”试试看

|
在头文件里面加:
#ifndef ___HEADER
#define ___HEDAER

...

#endif
语句,然后在主文件里面(e.c)包含所有头文件。

|
a.h里的函数声明改为
extern void fun1(void);
extern void fun2(void);
extern void fun3(void);

|
在e.c中使用声明
extern void fun1(void);
extern void fun2(void);
extern void fun3(void);

去掉#include

|
同意楼上的说法

|
刚刚试了一下,Linux 7.3 Gcc 2.96环境下,我编译ok啊
没问题啊。

你在试试,用 gcc -o test b.s c.c d.c e.c  ,应该不会有问题。

|
up

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux字符终端,GNU ,怎么隐藏光标?解决问题者另加200分。
  • 安装gnu。在线等侯,先给100分,解决了再给100分
  • Guangzhou GNU/Linux User,广州GNU/Linux用户组,欢迎加入
  • ★★★★ 简单问题: GNU 是什么的缩写? ★★★★
  • GNU ARM 工具链
  • GNU toolchain
  • GNU可移植线程库 nPth
  • GNU Automake
  • 可移植C++类库 GNU Common C++
  • 游戏 GNU Robbo
  • 怎样验证自己的make是不是GNU的make?
  • 弱弱问题:什么是GNU?
  • 软件无线电 GNU Radio
  • 小型的GNU环境 MSys
  • GNU/Hurd为何物,望指教!
  • 翻译GNU的文档侵犯版权吗?
  • GNU ld脚本 初学
  • GNU Hurd
  • GNU Make 标准库 GMSL
  • 休闲游戏 GNU Shogi
  • 单位转换测量 GNU Units
  • 任意精度数值计算器 GNU bc


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3