社区
Linux/Unix社区
帖子详情
编译连接时候的问题
thisisll
2005-11-30 05:25:54
现在有B.a里面放着b.o
我写了一个a.c
a.c里面调用了b.o的东西
如果我要编译连接a.c
那么
gcc -c a.c
gcc a.o -lB
可是我要把a.o放到B.a里面
那么生成a.o后
就要用ar把a.o放到B.a中了
可是没有连接,也就无法告诉a.o需要的b.o到底在哪里
我该如何??
...全文
166
12
打赏
收藏
编译连接时候的问题
现在有B.a里面放着b.o 我写了一个a.c a.c里面调用了b.o的东西 如果我要编译连接a.c 那么 gcc -c a.c gcc a.o -lB 可是我要把a.o放到B.a里面 那么生成a.o后 就要用ar把a.o放到B.a中了 可是没有连接,也就无法告诉a.o需要的b.o到底在哪里 我该如何??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gettext
2005-12-01
打赏
举报
回复
你可能是把编译和连接给弄混了。
thisisll
2005-12-01
打赏
举报
回复
有些问题
不问清楚永远都不清楚
------------------
连接使他得到函数的偏移量
那也就是说
总有个可执行程序在连接的时候最终调用到A.a中的a.o
然后a.o中的那个函数的偏移量就在这个时候得到了
我的理解对吗?
thisisll
2005-12-01
打赏
举报
回复
我也不想这样~~
饶着确实累啊
算了
大家休息吧~~
揭贴了~~~
lixiaosan
2005-12-01
打赏
举报
回复
就是整得有点麻烦了 。。。
直接弄到一个 .a就可以了。。。绕来绕去的。。人都绕昏了。。:)
yjf7888
2005-12-01
打赏
举报
回复
可以,没有问题
thisisll
2005-12-01
打赏
举报
回复
请楼上赐教
我之前就是看了这里才这么多莫名其妙的想法的
http://www-128.ibm.com/developerworks/cn/linux/l-dynlink/index.html#N10043
tb01412
2005-11-30
打赏
举报
回复
你难道不可以全部编译成.o文件之后再一起打包成库吗?????????简单的问题复杂化!!!
thisisll
2005-11-30
打赏
举报
回复
连接使他得到函数的偏移量
那也就是说
总有个可执行程序在连接的时候最终调用到A.a中的a.o
然后a.o中的那个函数的偏移量就在这个时候得到了
我的理解对吗?
bekars
2005-11-30
打赏
举报
回复
都放到B.a里了
那a.o就能找到b.o了吗?
从一开始我都没有告诉a.o他需要的函数在b.o中啊
当然可以!
如果我想把B.a放到A.a里
然后把a.o也放到A.a里
那a.o怎么知道他要的在A.a中的B.a中
所以的静态链接库相当于一个模块,所有的函数都是可见的(只要你包含正确的头文件),所以a.o可以找到它需要的东西。
thisisll
2005-11-30
打赏
举报
回复
还有问题
如果我想把B.a放到A.a里
然后把a.o也放到A.a里
那a.o怎么知道他要的在A.a中的B.a中
thisisll
2005-11-30
打赏
举报
回复
都放到B.a里了
那a.o就能找到b.o了吗?
从一开始我都没有告诉a.o他需要的函数在b.o中啊
bekars
2005-11-30
打赏
举报
回复
晕,需要这么复杂吗?
你直接将编译好的b.o和a.o一起ar为B.a不就可以了,不要把问题复杂化。
Win-Masm v2.2 汇编集成
编译
器
[软件介绍] Win-Masm是一个界面友好、操作简单,并且非常实用的8086汇编IDE开发环境。它基于masm6.15
编译
核心(同时兼容masm5.1)。支持语法高亮显示(并可自定义修改)、错误行快速定位、无限次Undo/Redo功能、Word式查找/替换功能、支持中文路径及长文件名等优点。界面的人性化设计,告别了在DOS平台下对汇编文件的编辑、
编译
、
连接
、运行等相关操作需要通过枯燥、繁琐并容易出错的命令敲打来完成的尴尬局面。一键
编译
/
连接
/运行/Debug的傻瓜式操作使得汇编爱好者能够更加专注于汇编语言的学习。 欲了解更多,请在安装完成后查看帮助手册! 软件官方博客:http://blog.csdn.net/paullbm
程序
编译
+
连接
的简单过程
1.程序的翻译环境和执行环境 在ANSI C的任何一种实现(
编译
器)中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。 test.c要经过翻译环境变成可执行程序。可执行程序(test.exe)依赖执行环境实现效果。 二进制指令只有机器可以读懂,所以也叫机器指令。 翻译环境就是将C语言的源代码翻译成机器能读懂的二进制指令 翻译环境可以再分为两个过程:
编译
和链接 C语言源代码经过
编译
会生成一个目标文件,目标
程序编辑,程序
编译
,程序
连接
。
程序编辑:上机输入或者编辑源程序。 程序
编译
: ①先用C提供的“预处理器”,对程序中的预处理指令进行
编译
预处理 ②对源程序进行语法检查,判断是否有语法错误,直到没有语法错误未知 ③
编译
程序自动把源程序转换为二进制形式的目标程序 程序
连接
:将所有
编译
后得到的目标模块
连接
装配起来,在与函数库相
连接
成为一个整体的过程称之为程序
连接
...
C/C++
编译
、
连接
与执行
代码的
编译
连接
与执行过程 1.
编译
一个个源文件,经过
编译
系统的处理,生成目标文件的过程叫做
编译
。
编译
是对一个个源文件分别处理的,因此每个源文件构成了一个独立的
编译
单元
编译
过程中不同的
编译
单元互不影响。a.cpp和b.cpp这两个源文件经过
编译
后,在Linux下会生成a.o和b.o两个目标文件。 目标文件主要用来描述程序在运行过程中需要放在内存中的内容,这
C++多文件
编译
及
连接
在学习清华大学郑莉老师的《C++语言程序设计(第四版》,刚学到第六章,课本里讲到了编写多个源文件代码并且
编译
连接
的过程,课本只讲了源代码内容和结构,对于如何
编译
连接
多个源文件并生成最终的可执行文件没有说明。本人摸索了一下,记录于此方便以后回顾。 追求简单粗暴可直接跳到最后。 源代码是关于数组对象的应用举例,包含三个文件: 1. Point.h 类 Point 的头文件,存放一些不需要分配空间的声明以及内联函数,代码如下: //Point.h #ifndef _POINT_H #define _P
Linux/Unix社区
23,215
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章