pthread.h не найден в Cygwin

#c #makefile #cygwin

Вопрос:

Я пытался установить стороннюю библиотеку PicklingTools в свою среду Windows, и мне нужно создать ее с помощью Makefile.Linux . Я использую make Cygwin, версии 4.3 и g версии 9.2.0.

Мое Makefile.Linux заключается в следующем:

 CC = g  
# CC = icc     # Intel seems to work

## With g   --version==4.4.x, you may need -fno-strict-aliasing to get rid 
## of some annoying warnings when you compile with -O2 or above

# *****CAREFUL! g   4.5.1 20100924 DOES NOT WORK with Ptools and -O.  You must
# compile without optimization for that compiler to work

OC = ./opencontainers_1_8_5
OCINC = $(OC)/include

CFLAGS = -Wall -Wextra -fpic -O -fno-strict-aliasing -DLINUX_ -DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I$(OCINC) -pthread -D_REENTRANT

## How to build with OCString
##CFLAGS = -Wall -O4 -DLINUX_ -DOC_USE_OC_STRING -DOC_USE_OC_EXCEPTIONS -DOC_ONLY_NEEDED_STL -DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I$(OCINC) 

###### CFLAGS = -Wall -O4 -DLINUX_-DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I$(OCINC) 


CCFLAGS = -pthread $(CFLAGS)

COM_OBJS = m2pythontools.o valpython.o midassocket.o valprotocol2.o m2ser.o m2streamdataenc.o m2convertrep.o timeconv.o fdtools.o
OBJS = midastalker_ex.o midastalker_ex2.o httpclient_ex.o httpserver_ex.o $(COM_OBJS) load.o save.o sharedmemory.o 

all: midasyeller_ex midastalker_ex midastalker_ex2 httpclient_ex midasserver_ex permutation_server permutation_client load save opal2dict dict2opal opaltest midasyeller_ex midaslistener_ex p2_test valgetopt_ex sharedmem_test ready_test xmlload_test xmlload_ex xmldump_test xmldump_ex speed_test pickleloader_test chooseser_test xml2dict dict2xml serverside_ex clientside_ex middleside_ex

.cc.o:
    $(CC) $(CFLAGS) -c

lt;

libptools.so : $(COM_OBJS)
$(CC) $(CCFLAGS) $(COM_OBJS) -shared -o libptools.so

midasserver_ex : $(COM_OBJS) midasserver_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midasserver_ex.o -pthread -o midasserver_ex

httpclient_ex : $(COM_OBJS) httpclient_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) httpclient_ex.o -pthread -o httpclient_ex

httpserver_ex : $(COM_OBJS) httpserver_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) httpserver_ex.o -pthread -o httpserver_ex

midasyeller_ex : $(COM_OBJS) midasyeller_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midasyeller_ex.o -pthread -o midasyeller_ex

midaslistener_ex : $(COM_OBJS) midaslistener_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midaslistener_ex.o -pthread -o midaslistener_ex

permutation_server : $(COM_OBJS) permutation_server.o
$(CC) $(CCFLAGS) $(COM_OBJS) permutation_server.o -pthread -o permutation_server

permutation_client : $(COM_OBJS) permutation_client.o
$(CC) $(CCFLAGS) $(COM_OBJS) permutation_client.o -pthread -o permutation_client

midastalker_ex :$(COM_OBJS) midastalker_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midastalker_ex.o -o midastalker_ex

midastalker_ex2 :$(COM_OBJS) midastalker_ex2.o
$(CC) $(CCFLAGS) $(COM_OBJS) midastalker_ex2.o -o midastalker_ex2

load = load

$(load) : $(COM_OBJS) load.o
$(CC) $(CCFLAGS) $(COM_OBJS) load.o -o load

serverside_ex : $(COM_OBJS) sharedmem.o shmboot.o serverside_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o shmboot.o -lrt serverside_ex.o -o serverside_ex

middleside_ex : $(COM_OBJS) middleside_ex.o sharedmem.o shmboot.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o shmboot.o -l rt middleside_ex.o -o middleside_ex

clientside_ex : $(COM_OBJS) clientside_ex.o sharedmem.o shmboot.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o shmboot.o -lrt clientside_ex.o -o clientside_ex

samplehttpserver_ex : $(COM_OBJS) samplehttpserver_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) samplehttpserver_ex.o -o samplehttpserver_ex

save : $(COM_OBJS) save.o
$(CC) $(CCFLAGS) $(COM_OBJS) save.o -o save

opal2dict : $(COM_OBJS) opal2dict.o
$(CC) $(CCFLAGS) $(COM_OBJS) opal2dict.o -o opal2dict

opaltest : $(COM_OBJS) opaltest.o
$(CC) $(CCFLAGS) $(COM_OBJS) opaltest.o -o opaltest

ready_test : $(COM_OBJS) ready_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) ready_test.o -o ready_test

chooseser_test : $(COM_OBJS) chooseser_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) chooseser_test.o -o chooseser_test

dict2opal : $(COM_OBJS) dict2opal.o
$(CC) $(CCFLAGS) $(COM_OBJS) dict2opal.o -o dict2opal

pickleloader_test : $(COM_OBJS) pickleloader_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) pickleloader_test.o -o pickleloader_test -lrt

xmldump_test : $(COM_OBJS) xmldump_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmldump_test.o -o xmldump_test -lrt

xmldump_ex : $(COM_OBJS) xmldump_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmldump_ex.o -o xmldump_ex -lrt

xmlload_test : $(COM_OBJS) xmlload_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmlload_test.o -o xmlload_test -lrt

xmlload_ex : $(COM_OBJS) xmlload_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmlload_ex.o -o xmlload_ex -lrt

xml2dict : $(COM_OBJS) xml2dict.o
$(CC) $(CCFLAGS) $(COM_OBJS) xml2dict.o -o xml2dict -lrt

dict2xml : $(COM_OBJS) dict2xml.o
$(CC) $(CCFLAGS) $(COM_OBJS) dict2xml.o -o dict2xml -lrt

speed_test : $(COM_OBJS) speed_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) speed_test.o -o speed_test -lrt

p2_test : $(COM_OBJS) p2_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) p2_test.o -o p2_test -lrt

valgetopt_ex : $(COM_OBJS) valgetopt_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) valgetopt_ex.o -o valgetopt_ex

json_ex : $(COM_OBJS) json_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) json_ex.o -o json_ex

# Only the tests that REALLY uses UNIX shared memory need the -lrt
sharedmem_test : $(COM_OBJS) sharedmem_test.o sharedmem.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o -lrt sharedmem_test.o -o sharedmem_test

# Only the tests that REALLY uses UNIX shared memory need the -lrt
checkshm_test : $(COM_OBJS) checkshm_test.o sharedmem.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o -lrt checkshm_test.o -o checkshm_test

clean :
/bin/rm -rf *.o *.so *~ midastalker_ex midastalker_ex2 httpserver_ex httpclient_ex midasserver_ex midasyeller_ex midaslistener_ex permutation_server permutation_client load save cxx_repository opal2dict opaltest dict2opal p2_test valgetopt_ex json_ex sharedmem_test ready_test speed_test pickleloader_test chooseser_test xmldump_test xmldump_ex xmlload_test xmlload_ex xml2dict dict2xml samplehttpserver_ex serverside_ex clientside_ex middleside_ex checkshm_test


и при его использовании make -f Makefile.Linux all я столкнулся со следующей ошибкой:

 g   -Wall -Wextra -fpic -O -fno-strict-aliasing -DLINUX_ -DOC_NEW_STYLE_INCLUDES -Wno-depr
ecated -I./opencontainers_1_8_5/include -pthread -D_REENTRANT -c m2pythontools.cc
In file included from ./opencontainers_1_8_5/include/ocstreamingpool.h:23,
                 from ./opencontainers_1_8_5/include/ocarray.h:28,
                 from m2pythontools.h:8,
                 from m2pythontools.cc:2:
./opencontainers_1_8_5/include/ocsynchronizer.h:14:10: fatal error: pthread.h: No such fil
e or directory
   14 | #include <pthread.h>
      |          ^~~~~~~~~~~
compilation terminated.
make: *** [MakeFile.Linux:29: m2pythontools.o] Error 1

 

где строка 27-30:

 
.cc.o:
    $(CC) $(CFLAGS) -c

lt;


Я проверил свой /usr/include каталог и нашел pthread.h заголовок, и там есть древний поток, в котором упоминается, что pthread он включен, cygwin1.dll и, следовательно, его можно просто передать -lcygwin . Однако это тоже не сработало для меня. Я также попытался переместить pthread.h файл в каталог, но все равно получил ту же ошибку, я не знаю, как действовать.

ИЗМЕНИТЬ: Запуск echo | cpp -v дает следующий результат:

 Using built-in specs.
COLLECT_GCC=C:MinGWbincpp.exe
Target: mingw32
Configured with: ../src/gcc-9.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --t
arget=mingw32 --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-stati
c --enable-shared --enable-threads --enable-languages=c,c  ,objc,obj-c  ,fortran,ada --wit
h-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --enable-libgomp
 --disable-libvtv --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libs
tdcxx-debug --disable-build-format-warnings --prefix=/mingw --with-gmp=/mingw --with-mpfr=
/mingw --with-mpc=/mingw --with-isl=/mingw --enable-nls --with-pkgversion='MinGW.org GCC B
uild-20200227-1'
Thread model: win32
gcc version 9.2.0 (MinGW.org GCC Build-20200227-1)
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=i586'
 c:/mingw/bin/../libexec/gcc/mingw32/9.2.0/cc1.exe -E -quiet -v -iprefix c:mingwbin../l
ib/gcc/mingw32/9.2.0/ - -mtune=generic -march=i586
ignoring nonexistent directory "c:mingwbin../lib/gcc/mingw32/9.2.0/../../../../mingw32/
include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/9.2.0/include"
ignoring nonexistent directory "/mingw/include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../include"
ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/9.2.0/include-fixed"
ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/9.2.0/../../../../m
ingw32/include"
ignoring nonexistent directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
 c:mingwbin../lib/gcc/mingw32/9.2.0/include
 c:mingwbin../lib/gcc/mingw32/9.2.0/../../../../include
 c:mingwbin../lib/gcc/mingw32/9.2.0/include-fixed
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/9.2.0/;c:/mingw/bin/../libexec/gcc/;c:/m
ingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/9.2.0/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/
../lib/gcc/mingw32/9.2.0/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/9.2.0/..
/../../
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=i586'

 

Комментарии:

1. Вы установили пакет mingw64-x86_64-pthreads ?

2. @TedLyngmo пожалуйста, ознакомьтесь с выводом в правке.

3. Кажется pthread.h , что этого не существует в c:/mingw/lib/gcc/mingw32/9.2.0/include (или c:/mingw/include ), верно? Я не уверен, что это проблема с установкой или нет, но вы можете попробовать ln -s /usr/include/pthread.h c:/mingw/lib/gcc/mingw32/9.2.0/include скомпилировать, чтобы посмотреть, изменится ли это.

4. Похоже, вы смешиваете cygwin и mingw, это две совершенно разные системы. Попробуйте использовать только по одному за раз.

5. Вам нужно открыть оболочку cygwin и запустить /usr/bin/gcc оттуда. Не пытайтесь бежать c:mingwlib при использовании cygwin.

Ответ №1:

В зависимости от того, создаете ли вы для Cygwin или для Mingw (от Cygwin), вам нужны разные пакеты cygwin: cygwin-devel или mingw64-x86_64-winpthreads

 $ cygcheck -l mingw64-x86_64-winpthreads | grep /pthread.h
/usr/x86_64-w64-mingw32/sys-root/mingw/include/pthread.h

$ cygcheck -l cygwin-devel | grep /pthread.h
/usr/include/pthread.h
 

Комментарии:

1. Избавление mingw от пути сотворило волшебство, которое я испытал cygwin-devel , когда gcc запускался на mingw.