【发布时间】:2020-09-11 23:18:15
【问题描述】:
我正在尝试编译和运行我的 C 程序。该程序使用线程。 我正在使用带有 Ubuntu 终端的 WSL 运行 Windows 10。 (也尝试使用 Ubuntu 虚拟机) 这是我用于所有程序的“默认” Makefile 格式(更改每个程序的名称和标志)
CC=gcc
CFLAGS=-I. -w -pthread
DEPS = v1.h
version1: v1
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
v1: v1.o
$(CC) -o v1 v1.o
这是我第一次在 C 语言中使用线程,这让我发现了 -pthread。我发现你需要将它添加到标志中(我用 CFLAGS 做了)。出于某种原因,当我在上面运行这个 makefile 时出现错误,找不到 pthread 函数,我注意到修复它的方法是通过更改这一行:
$(CC) -o v1 v1.o -pthread
在末尾添加 pthread。 所有这一切导致我对标志进行了一些研究,在搜索 gcc 的手册页和谷歌之后,我发现这些问题没有简单的答案:
- 为什么我需要将 -pthread 添加到 .o 任务和 .c 任务?为什么仅将其添加到一个还不够?
- 什么是-w 标志?我知道它代表“警告”,但 -w 和 -Wall 有什么区别?
- 什么是-I。旗帜?同样,我发现它代表“包含”,但我不确定它在做什么。我的 makefile 可以使用或不使用该标志。
谢谢。
【问题讨论】:
-
C 现在还没有原生线程吗?从 C11 开始?
-
@MSalters 我的 gcc 是 7.4.0 版。如何检查/更改我的 C 版本?
-
@Birkagal:见stackoverflow.com/questions/16256586/…
-
请注意,这是一个针对每个问题的特定问题的论坛,而不是多个问题。我相信这个论坛也非常感谢提问者为找到他们问题的答案所做的工作——我相信你的一些问题可以很容易地在互联网和你的编译器文档中找到。 On-topic 和 how-to-ask 是有用的资源。
-
同意@KamilCuk。 OP,flag相关问题很容易找到,下次请慢慢来。不过,第一个问题是有道理的,因为对于第一次处理这个问题的人来说,它可能需要一些详细说明。
标签: c linux gcc compiler-flags linker-flags