c - Makefile:链接 .*a 库

标签 c linux linker makefile dynamic-library

描述: 我有一个库 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

最佳答案

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

minishell.c
entrada_minishell.c
ejecutar.c

并且您想要编译它们,然后将它们与 libshel​​l.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 标志来自动生成依赖项。

关于c - Makefile:链接 .*a 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16972418/

相关文章:

c++ - 在信号处理程序中,如何知道程序在哪里被中断?

c - 微 Controller 89c52 - 7 段复用显示

linux - 科学 linux 上的代码块

linux - 在 cron 作业中为 url 提供凭据

c - ELF 文件中的程序头和节头

c - 为什么 math.h 需要链接到 makefile 而不是 string.h?

C++ 链接 boost 库

c - 假设我们有一个包含节点和边的图,我们如何表示边列表。我不是在谈论邻接列表

c - 在 C 中使用循环创建线程?

c - 通过引用与通过值传递 int 的好处?