Я использую linux на ubuntu. Однако у меня проблема даже при использовании pthread и lpthread. Пожалуйста помоги! Заранее спасибо!
yuki@ubuntu:~/NetBeansProjects/csci212A3$ g++ Path.o Maze.o SubmitMazeSoln.o TestSubmitMazeSoln.cpp -o -lpthread
In file included from Maze.h:12:0,
from TestSubmitMazeSoln.cpp:11:
Assignm3_Utils.h: In constructor ‘Point::Point():
Assignm3_Utils.h:17:19: warning: converting to non-pointer type ‘int from NULL [-Wconversion-null]
Point () { x = NULL; y = NULL; }
^
Assignm3_Utils.h:17:29: warning: converting to non-pointer type ‘int from NULL [-Wconversion-null]
Point () { x = NULL; y = NULL; }
^
/tmp/ccMQbyoO.o: In function 'newThread()':
TestSubmitMazeSoln.cpp:(.text+0x3ab2): undefined reference to 'pthread_create'
TestSubmitMazeSoln.cpp:(.text+0x3b0a): undefined reference to 'pthread_create'
TestSubmitMazeSoln.cpp:(.text+0x3b53): undefined reference to 'pthread_join'
TestSubmitMazeSoln.cpp:(.text+0x3b79): undefined reference to 'pthread_join'
collect2: error: ld returned 1 exit status
Это действительно точная копия вашей командной строки:
g++ Path.o Maze.o SubmitMazeSoln.o TestSubmitMazeSoln.cpp -o -lpthread
Параметр -o
указывает выходной файл и ожидает аргумент. Как указано выше, этот аргумент -lpthread
. Поэтому -lpthread
не является аргументом (и библиотека pthread не будет искать); это имя вашего выходного файла. (И вы действительно не хотите, исполняемый файл, или любой другой файл, с именем -lpthread
; имена файлов, которые начинаются с -
. Не вызывает никакого конца проблем под Unix)
Что касается предупреждений: я бы предположил, что x
и y
в Point
имеют тип int
. NULL
является обычным способом указания нулевого указателя, а его использование в качестве int
является обфускацией в первой степени. Поэтому g++ предупреждает. (Конечно, из С++ 11 on, следует предпочесть nullptr
для нулевого указателя, а не NULL
.)