【发布时间】:2019-04-09 14:11:52
【问题描述】:
我有一个 C 程序,我一直在多台机器上工作,虽然它在我的 MacBook 上正确编译,但我无法让该程序在 Linux 的 Windows 子系统上编译,运行 Ubuntu 18.04 并使用 gcc。
该程序产生多个线程,当我尝试在 Windows 子系统上编译它时,我收到错误 undefined reference to `pthread_create。
其他几个问题,例如this、this 和this,建议使用-lpthread 作为编译器标志来解决问题,但我已经这样做了,它在 OSX 上编译得很好,所以我怀疑这个问题可能与我的 WSL 配置有关。
我的 Makefile 是:
CC = gcc
CCOPTS = -Wall -c -g -ggdb
LINKOPTS = -Wall -g -ggdb -lpthread
all: calc
calc: calc.o smp3_tests.o testrunner.o
$(CC) $(LINKOPTS) -o $@ $^
calc.o: calc.c calc.h
$(CC) $(CCOPTS) -o $@ $<
我将 pthread 标头包含在 #include <pthread.h> 中,并使用 pthread_create(&multiplierThread, NULL, multiplier, arg) 调用 pthread_create 函数。
有谁知道导致这个编译器错误的原因是什么?
【问题讨论】:
-
我对 WSL 一无所知,但除非它使用与 GNU 工具链不同的约定,否则不要使用
CCOPTS和LINKOPTS,使用常规变量名称(即CFLAGS和LDFLAGS)。如果没有其他原因,那是因为它使显式编写其他规则变得多余。
标签: c ubuntu gcc ubuntu-18.04 windows-subsystem-for-linux