【问题标题】:Where to put pthread flags in a MakeFile?在 MakeFile 中的何处放置 pthread 标志?
【发布时间】:2023-03-23 21:06:01
【问题描述】:

我正在尝试使用 MakeFile 编译程序。但是,我似乎无法弄清楚在哪里粘贴标志以使其识别 pthread,甚至不知道该标志到底是什么。
我对这个问题做了一些搜索,但我觉得我找到的结果并不清楚如何解决这个问题,所以我把这个问题带到了一个论坛帖子中。

无论如何,这是我文件的内容。我已经标记了我认为国旗可以去的地方。

#CC = cc
CFLAGS=-Wall (flag here?)
OUTFILE=app

# Debug flags
DFLAGS=-g -DDEBUG

# Release flags
RFLAGS=

# Targets to build
SOURCES=PosixSavings.c

.PHONY: all
all: CFLAGS+=$(RFLAGS)
all: link

.PHONY: all-debug
all-debug: CFLAGS+=$(DFLAGS)
all-debug: link

.PHONY: clean
clean:
    $(RM) $(SRCcIR)/*~
    $(RM) $(INCDIR)/*~
    $(RM) *~
    $(RM) *.o
    $(RM) $(OUTFILE)

link:
    $(CC) $(CFLAGS) $(SOURCES) -o $(OUTFILE) (flag here?)

如果这里已经存在解决方案但我错过了,请随时指出它。
非常感谢。

【问题讨论】:

  • 你没有说你想添加什么确切的标志,你没有说你尝试了什么,你没有说你尝试了什么没有工作。另外,这是一个奇怪的 makefile;在这里有一个makefile几乎没有任何意义;您可以使用简单的 shell 脚本获得相同的行为。
  • 我明白了。我道歉。我需要的标志是-pthread 或-lpthread。我尝试将这些标志放置在标记的位置以及代码中的其他位置,但没有任何结果。另外,我同意手动执行此操作会更简单,但这是为了学校作业,教授想要一个 MakeFile。
  • “没有结果”是什么意思?构建是否失败?你的程序失败了吗?为什么你觉得有问题?你也没有说你正在使用什么编译器;不同编译器的标志可能不同。但是,对于 GCC,正确的标志是 -pthread,它可以出现在命令行的任何位置。
  • 再次,我为疏忽道歉。构建实际上失败了,因为编译器告诉我所有 pthread 函数都未定义。是的,我正在使用 GCC。
  • 我已经尝试将 -pthread 添加到 make 文件中,但构建仍然失败。说函数引用未定义。

标签: makefile


【解决方案1】:

我不知道该告诉你什么,因为它对我来说很好用:

$ cat /tmp/pt.c
#include <stdio.h>
#include <pthread.h>

void* start(void* arg) { return arg; }

int main() { pthread_t pt; pthread_create(&pt, NULL, start, NULL); return 0; }

现在如果我运行 -pthread 我得到:

$ cc -Wall -g -DDEBUG /tmp/pt.c -o /tmp/pt
/tmp/ccFyRHKv.o: In function `main':
/tmp/pt.c:6: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

如果我添加-pthread(我把它放在哪里都没关系):

$ cc -Wall -pthread -g -DDEBUG /tmp/pt.c -o /tmp/pt

不打印任何错误或警告。

因此,您需要编辑您的问题并显示打印出来的编译行以及生成的确切错误(请将它们剪切并粘贴到您的问题中,然后添加空格,以便它们显示为代码块)。然后也许我们可以弄清楚发生了什么。

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 2012-11-07
    • 2019-11-24
    • 1970-01-01
    • 2011-01-08
    • 2019-02-24
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多