首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >math.h与文件的链接

math.h与文件的链接
EN

Stack Overflow用户
提问于 2012-05-01 18:17:42
回答 4查看 9.6K关注 0票数 0

我有一个小问题,我已经尝试了所有的方法来测试这个功能,你能帮我吗?我需要写一个名为"mutual_info.c“的C文件,它需要一个数学函数。我已经包含了这个库并将其链接到了makefile中,但它仍然给我提供了“对日志的未定义引用”……我的包看起来像这样:(我在Ubuntu上使用Eclipse )

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
#include "graph_or.h"
#include <math.h>

我的makefile看起来像这样:

代码语言:javascript
复制
all:

    gcc -g amostra.c sample.h -o amostra.o

    gcc -g graph_or.c graph_or.h -o graph_or.o

    gcc -g graph_w.c graph_W.h -o graph_W.o

    gcc -g mutual_info.c -o mutual_info.o -lm

clean:
    rm *.o

我完全不知道发生了什么,我甚至试图在命令"all“之前定义LDFLAGS,并将其放在下面:

代码语言:javascript
复制
LDFLAGS= -lm
all:

    gcc -g amostra.c sample.h -o amostra.o

    gcc -g graph_or.c graph_or.h -o graph_or.o

    gcc -g graph_w.c graph_W.h -o graph_W.o

    gcc -g mutual_info.c -o mutual_info.o -lm

clean:
    rm *.o

但是它还是不能工作!请大家注意,我需要帮助!谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-01 21:17:02

让我们一步一步地来完成。

编写makefile的通常方法是为每个目标都有一个规则,并使用先决条件:

代码语言:javascript
复制
thing: amostra.o graph_or.o graph_w.o mutual_info.o
    gcc -g amostra.o graph_or.o graph_w.o mutual_info.o -o thing -lm

mutual_info.o: mutual_info.c
    gcc -g -c mutual_info.c -o mutual_info.o -lm

amostra.o: amostra.c sample.h
    gcc -g -c amostra.c -o amostra.o

graph_or.o: graph_or.c graph_or.h 
    gcc -g -c graph_or.c -o graph_or.o

graph_w.o: graph_w.c graph_w.h
    gcc -g -c graph_w.c -o graph_w.o

mutual_info.o: mutual_info.c
    gcc -g -c mutual_info.c -o mutual_info.o -lm

(我猜您希望将可执行文件命名为thing,并且您指的是graph_w,而不是graph_W。)

这应该是可行的,但我们可以让它更整洁。首先,我们介绍一下automatic variables

代码语言:javascript
复制
thing: amostra.o graph_or.o graph_w.o mutual_info.o
    gcc -g $^ -o $@ -lm

mutual_info.o: mutual_info.c
    gcc -g -c $< -o $@

amostra.o: amostra.c sample.h
    gcc -g -c $< -o $@

graph_or.o: graph_or.c graph_or.h 
    gcc -g -c $< -o $@

graph_w.o: graph_w.c graph_w.h
    gcc -g -c $< -o $@

mutual_info.o: mutual_info.c
    gcc -g -c $< -o $@

然后,我们看到这些配方使用相同的命令,因此我们创建了一个模式规则:

代码语言:javascript
复制
thing: amostra.o graph_or.o graph_w.o mutual_info.o
    gcc -g $^ -o $@ -lm

amostra.o: sample.h

graph_or.o: graph_or.h 

graph_w.o: graph_w.h

%.o: %.c
    gcc -g -c $< -o $@

试一试,告诉我们它是否有效。

票数 1
EN

Stack Overflow用户

发布于 2012-05-01 18:31:03

那是你Makefile中的片段吗?您是否尝试过导出LDFLAG?我以前见过这个错误,但它总是用-lm标志修复。

gcc -lm -o诸如此类。c

票数 0
EN

Stack Overflow用户

发布于 2012-05-01 18:57:51

您需要:

gcc -c -o amostra.o amostra.c

gcc -c -o graph_or.o graph_or.c

gcc -c -o graph_w.o graph_w.c

gcc -c -o mutual_info.o mutual_info.c

gcc -o YourExecutableName amostra.o graph_or.o graph_w.o mutual_info.o -lm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10396325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档