【发布时间】:2018-08-27 10:50:19
【问题描述】:
我正在使用Makefile 创建一个可执行文件,所以当我运行可执行文件时,我只写了./ft_ls,但是得到了这个错误,下面是我的 Makefile 的代码。
“ar: ft_ls: 不合适的文件类型或格式”
但是当我创建一个库并添加我的 main.c 文件和 gcc 时,它会运行 file.so。如何从以下 Makefile 创建可执行文件?
14 NAME = ft_ls
15
16 SRCS = main.c\
17 ft_perm.c\
18 ft_group.c\
19 count.c\
20 ls_l.c\
21 ls.c\
22 ls_a.c\
23 ls_rr.c\
24 ls_r.c\
25 ls_r_m.c\
26 multi_args_l.c\
27 ft_anigma.c\
28 ls_g.c\
29 ft_printf/ft_printf.c\
30 ft_printf/precision.c ft_printf/mask_unicode.c ft_printf/width.c ft_printf/null_char.c ft_printf/wstr_precision.c\
31 ft_printf/flags/flags.c ft_printf/flags/type_flags.c ft_printf/flags/checking_for.c ft_printf/n_func.c\
32 ft_printf/conv/applying.c ft_printf/conv/conversion.c ft_printf/conv/zero_conv.c\
33 ft_printf/alloc/ft_alloc.c ft_printf/alloc/to_str.c ft_printf/libft/ft_atoi.c ft_printf/alloc/ft_del_str.c\
34 ft_printf/libft/ft_strncpy.c ft_printf/libft/ft_strcmp.c libft/ft_strncmp.c ft_printf/libft/ft_putstr.c ft_printf/color_part_two.c \
35 ft_printf/libft/ft_strcpy.c ft_printf/libft/ft_strlen.c ft_printf/libft/ft_strdup.c \
36 ft_printf/test/h_test.c ft_printf/test/jz_test.c ft_printf/test/l_test.c ft_printf/test/basic_test.c \
37 ft_printf/itoa/ft_itoa_ll.c ft_printf/itoa/reverse.c ft_printf/libft/ft_strwdup.c ft_printf/color.c \
38
39 OB = main.o \
40 ft_perm.o\
41 ft_group.o\
42 count.o\
43 ls_l.o\
44 ls.o\
45 ls_a.o\
46 ls_rr.o\
47 ls_r.o\
48 ls_r_m.o\
49 multi_args_l.o\
50 ft_anigma.o\
51 ls_g.o\
52 ft_printf.o\
53 type_flags.o applying.o basic_test.o checking_for.o conversion.o \
54 flags.o ft_alloc.o ft_atoi.o mask_unicode.o n_func.o\
55 ft_printf.o ft_strcmp.o ft_strcpy.o to_str.o wstr_precision.o\
56 ft_strdup.o ft_strlen.o ft_strncpy.o h_test.o jz_test.o l_test.o precision.o \
57 reverse.o width.o ft_itoa_ll.o null_char.o zero_conv.o ft_strwdup.o color.o \
58 ft_putstr.o color_part_two.o ft_del_str.o ft_strncmp.o\
59
60 FLAGS = -Werror -Wall -Wextra
61
62 $(NAME):
63 gcc $(FLAGS) $(SRCS) -o $(NAME)
64
65 all: $(NAME)
66
67 clean:
68 rm -f $(OB)
69
70 fclean: clean
71 rm -f $(NAME)
72
73 re: fclean all
【问题讨论】:
-
从您的
gcc行中删除-c,并删除ar行。 FWIW,-c的意思是“编译后停止,生成目标文件”,而不是尝试将所有已编译代码链接到可执行文件的默认行为。ar命令实际上是“归档”的缩写......因为静态库 (.a) 实际上只是一个稍微特殊的目标文件 tar 归档。 -
我试过这样做,但这就是我得到的架构 x86_64 的未定义符号:“_ft_printf”,引用自:main-4da9d1.o 中的 _main_malti main-4da9d1.o 中的_main“_ft_strcmp”,引用来自:main-4da9d1.o 中的 _main_malti 主 4da9d1.o 中的 _main "_ls",引用自:main-4da9d1.o 中的 _main
-
好吧,这才是真正的问题;如果这意味着您正在使用 Mac(以便拥有通用二进制文件),那将是添加到问题中的一个很好的标签。 x86_64 是您正在开发的平台吗?您是否在 CFLAG 中设置了任何架构标志? (例如,-m32 或 -m64)
标签: makefile