#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.somidasserver_ex : $(COM_OBJS) midasserver_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midasserver_ex.o -pthread -o midasserver_exhttpclient_ex : $(COM_OBJS) httpclient_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) httpclient_ex.o -pthread -o httpclient_exhttpserver_ex : $(COM_OBJS) httpserver_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) httpserver_ex.o -pthread -o httpserver_exmidasyeller_ex : $(COM_OBJS) midasyeller_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midasyeller_ex.o -pthread -o midasyeller_exmidaslistener_ex : $(COM_OBJS) midaslistener_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midaslistener_ex.o -pthread -o midaslistener_expermutation_server : $(COM_OBJS) permutation_server.o
$(CC) $(CCFLAGS) $(COM_OBJS) permutation_server.o -pthread -o permutation_serverpermutation_client : $(COM_OBJS) permutation_client.o
$(CC) $(CCFLAGS) $(COM_OBJS) permutation_client.o -pthread -o permutation_clientmidastalker_ex :$(COM_OBJS) midastalker_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) midastalker_ex.o -o midastalker_exmidastalker_ex2 :$(COM_OBJS) midastalker_ex2.o
$(CC) $(CCFLAGS) $(COM_OBJS) midastalker_ex2.o -o midastalker_ex2load = load
$(load) : $(COM_OBJS) load.o
$(CC) $(CCFLAGS) $(COM_OBJS) load.o -o loadserverside_ex : $(COM_OBJS) sharedmem.o shmboot.o serverside_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o shmboot.o -lrt serverside_ex.o -o serverside_exmiddleside_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_exclientside_ex : $(COM_OBJS) clientside_ex.o sharedmem.o shmboot.o
$(CC) $(CCFLAGS) $(COM_OBJS) sharedmem.o shmboot.o -lrt clientside_ex.o -o clientside_exsamplehttpserver_ex : $(COM_OBJS) samplehttpserver_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) samplehttpserver_ex.o -o samplehttpserver_exsave : $(COM_OBJS) save.o
$(CC) $(CCFLAGS) $(COM_OBJS) save.o -o saveopal2dict : $(COM_OBJS) opal2dict.o
$(CC) $(CCFLAGS) $(COM_OBJS) opal2dict.o -o opal2dictopaltest : $(COM_OBJS) opaltest.o
$(CC) $(CCFLAGS) $(COM_OBJS) opaltest.o -o opaltestready_test : $(COM_OBJS) ready_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) ready_test.o -o ready_testchooseser_test : $(COM_OBJS) chooseser_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) chooseser_test.o -o chooseser_testdict2opal : $(COM_OBJS) dict2opal.o
$(CC) $(CCFLAGS) $(COM_OBJS) dict2opal.o -o dict2opalpickleloader_test : $(COM_OBJS) pickleloader_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) pickleloader_test.o -o pickleloader_test -lrtxmldump_test : $(COM_OBJS) xmldump_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmldump_test.o -o xmldump_test -lrtxmldump_ex : $(COM_OBJS) xmldump_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmldump_ex.o -o xmldump_ex -lrtxmlload_test : $(COM_OBJS) xmlload_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmlload_test.o -o xmlload_test -lrtxmlload_ex : $(COM_OBJS) xmlload_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) xmlload_ex.o -o xmlload_ex -lrtxml2dict : $(COM_OBJS) xml2dict.o
$(CC) $(CCFLAGS) $(COM_OBJS) xml2dict.o -o xml2dict -lrtdict2xml : $(COM_OBJS) dict2xml.o
$(CC) $(CCFLAGS) $(COM_OBJS) dict2xml.o -o dict2xml -lrtspeed_test : $(COM_OBJS) speed_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) speed_test.o -o speed_test -lrtp2_test : $(COM_OBJS) p2_test.o
$(CC) $(CCFLAGS) $(COM_OBJS) p2_test.o -o p2_test -lrtvalgetopt_ex : $(COM_OBJS) valgetopt_ex.o
$(CC) $(CCFLAGS) $(COM_OBJS) valgetopt_ex.o -o valgetopt_exjson_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_testclean :
/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.