[英]Converting .o file into static library in linux and make it usable in terminal
[英]Linux: .c and Makefile “How to create the .s and .o file so that I can use ”make“ in terminal?”
好的,我假设这是一个简单的问题。 我有一个.c文件和一个Makefile文件。 如果重要的话,我正在使用Linux 12.10 ubuntu。 我试图了解如何在终端中编写代码以获取这两个文件,以在这两个文件利用make的目录中创建可执行文件,源文件和目标文件。 我已经安装了nasm,但是不确定是否还需要安装其他东西。 这是我目前正在做的事情,但似乎无法理解在Windows中可以执行的操作的基本知识,但似乎无法使其在Linux中工作。 我将Makefile更改为linux以外的文件。
我知道这可能超级容易,但是我对linux还是很陌生,我并不真正理解某些事情,我想我应该很容易就能弄清楚,所以如果这看起来很简单,我会道歉。
$ make firstlab.c firstlab
我在正确的目录中后在终端中输入的内容。 我的反馈是“
make: Nothing to be done for `homework1.c'.
gcc homework1.c -o homework1
homework1.c: In function ‘main’:
homework1.c:20:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
homework1.c:21:5: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default]
”
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char* argv[])
{
int firstNumber = 0;
int secondNumber = 0;
int result = 0;
printf("Enter first value: ");
scanf("%d", &firstNumber);
printf("Enter second value: ");
scanf("%d", &secondNumber);
if(firstNumber >= secondNumber)
result = firstNumber - secondNumber;
else if(secondNumber > firstNumber)
result = secondNumber + firstNumber;
printf("Result: %d\n", result);
system("pause");
return result;
}
制作文件:
##########H
PROJECT = Homework1
##################
CC = gcc
# win 32
#RM = del
#linux
RM = rm -f
BIN = $(PROJECT).exe
OBJ = $(PROJECT).o
all: $(BIN)
clean:
${RM} $(OBJ) $(BIN) $(PROJECT).s
$(BIN): $(OBJ)
$(CC) $(OBJ) -o $(PROJECT).exe
$(OBJ): $(PROJECT).s
$(CC) -c $(PROJECT).s -o $(PROJECT).o
$(PROJECT).s: $(PROJECT).c
$(CC) -c $(PROJECT).c -S -masm=intel
任何帮助表示赞赏。
您确定您有一个makefile? 您显示的输出似乎与该假设不符。
make firstlab.c firstlab
。 您可以将其替换为make firstlab
,结果将相同。 如果要使用对象文件类型,请make firstlab.o
。
所有这些行为都取决于make
的隐式规则。 您可能应该为项目编写一个makefile,以更好地控制行为。 为了支持创建程序集文件( firstlab.s
),您仍然必须这样做。 规则如下:
%.s : %.c
$(CC) $(CFLAGS) -S -o $@ $<
应该做。 您可以为可执行文件和目标文件制定相似的规则。 我强烈建议您快速浏览一下《 GNU Make手册》以开始使用。
要修复printf
和scanf
警告,请在程序顶部添加#include <stdio.h>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.