1

描述:我有一个库 libshel​​l.a,里面是我正在尝试使用的函数 ord_interna,但是似乎我链接错了,你们能解决我的错误,所以我以后不做了吗?干杯,

错误:

/tmp/ccn5lbmJ.o: In function `main':
minishell.c:(.text+0x4e): undefined reference to `ord_interna'
collect2: error: ld returned 1 exit status
make: *** [minishell.o] Error 1

生成文件:

CC=gcc 
CFLAGS=-Wall -pedantic -c

all: microshell

microshell: minishell.o
    gcc minishell.o -o microshell

minishell.o: minishell.c
    gcc minishell.c minishell.h entrada_minishell.c entrada_minishell.h ejecutar.c ejecutar.h libshell.a

clean:
    rm -rf *o microshell
4

1 回答 1

4

从你的makefile,我猜你有这些源文件:

minishell.c
entrada_minishell.c
ejecutar.c

并且您想要编译它们,然后将它们全部链接在一起libshell.a以创建一个名为microshell. 在这种情况下,您需要类似:

CC=gcc
CFLAGS=-Wall -pedantic

all: microshell

microshell: minishell.o entrada_minishell.o ejecutar.o
    $(CC) -o $@ $^ -L. -lshell

如果你愿意,你可以添加一个clean目标,但这应该能让你继续前进。

编者注:

  1. 将头文件放在编译行上真的很奇怪;我以为你实际上并不想这样做。

  2. 您应该查看 gcc 的-MMD标志来自动生成依赖项。

于 2013-06-06T21:31:18.143 回答