【发布时间】:2018-11-18 18:39:57
【问题描述】:
我有 3 个目录,src、lib 和 include。在include 我有头文件header3.h。其代码如下:
//header3.h
extern void change(int *a);
在lib 我有文件change4.c,其中包含:
//change4.c
#include <stdlib.h>
#include "header3.h"
void change(int *a){
int y=100;
*a=y;
}
在src 我有文件manipulate5.c,其中包含:
//manipulate5.c
#include <stdio.h>
#include "header3.h"
int main(void){
int x=10;
printf("x is %d\n", x );
change(&x);
printf("x is now %d\n", x );
}
我分别为文件manipulate5.c 和change4.c 创建了目标文件manipulate5.o 和change4.o。当manipulate5.o 在src 和change4.o 在lib 中时,如何链接两者?
我应该进一步澄清;我应该能够在src 目录中运行可执行文件。因此,我不能在根目录下进行编译。
【问题讨论】:
-
手动。还有什么?
-
您需要修复
change()— 将整数分配给指针在多个方面是错误的。使用*a = y;(而且空间很便宜——始终使用它们)。 -
假设当前目录是包含
src和lib的目录,那么cc -o program src/manipulate5.o lib/change4.o— 其中cc是您的C 编译器的名称,当然。如果您尚未创建目标文件,请使用以.c结尾的名称;显示的代码不会慢很多。 -
您能告诉我“手动”的含义吗?改变改变不是问题;计算机告诉我 change4.o 根本不存在。
-
Jonathon Leffler:感谢您的回答。它对我的目的来说足够好。
标签: c object-files