Я хочу скомпилировать набор физических симуляций Chroma на суперкомпьютере JUQUEEN, который является установкой IBM BlueGene / Q. Интерфейсы работают на RedHat Linux 6. Архитектура PowerPC 7 используется как на внешнем, так и на вычислительном узлах. Используемые ими процессоры отличаются, однако, у внешнего интерфейса есть IBM Power 740, вычислительные узлы — это чипы IBM Power A2. Использование компиляторов, таких как mpigcc
а также mpig++
автоматически кросс-компиляция для вычислительных узлов.
Современные версии программ могут быть загружены в путь с помощью module
, Есть зависимости от двух других библиотек, которые должны быть скомпилированы. Я сделал с qmp
теперь. qdpxx
также зависит от libxml2
и вот где я застрял:
chroma --- qdpxx --- qmp
\-- libxml2
На моей рабочей станции Fedora 24 я могу скомпилировать qdpxx
просто отлично, используя общесистемную установку libxml2
, Я только что установил пакеты RPM libxml2
а также libxml2-devel
и не нужно было указывать какие-либо -with-libxml2=DIR
аргументы qdpxx/configure
,
На интерфейсе суперкомпьютера я получаю это:
+ ./configure --prefix=/homec/hbn28/hbn28e/local/ --host=powerpc64-bgq-linux --build=powerpc64-unknown-linux-gnu --enable-bgq-thread-binding --enable-openmp --enable-parallel-arch=parscalar --enable-precision=double --enable-parallel-io --enable-qdp-alignment=128 --with-qmp=/homec/hbn28/hbn28e/local/ 'CFLAGS=-O2 -finline-limit=50000 -I/usr/local/bg_soft/mpich3/include -Wall -Wpedantic -fdiagnostics-color=auto --std=c99 -fopenmp --std=gnu99' 'CXXFLAGS=-O2 -finline-limit=50000 -I/usr/local/bg_soft/mpich3/include -Wall -Wpedantic -fdiagnostics-color=auto --std=c++11 -fopenmp' LDFLAGS= LIBS= CC=/bgsys/local/gcc/4.9.3/bin/mpigcc CXX=/bgsys/local/gcc/4.9.3/bin/mpig++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... yes
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether /bgsys/local/gcc/4.9.3/bin/mpig++ accepts -g... yes
checking for powerpc64-bgq-linux-ranlib... no
checking for ranlib... ranlib
configure: WARNING: using cross tools not prefixed with host triplet
checking for powerpc64-bgq-linux-ar... no
checking for ar... ar
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for powerpc64-bgq-linux-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking dependency style of /bgsys/local/gcc/4.9.3/bin/mpig++... gcc3
configure: Configuring QDP++ for Nd = 4
configure: Configuring QDP++ for Nc = 3
configure: Configuring QDP++ for Ns = 4
configure: Configuring QDP++ Alignment size=16
configure: Fallback to generic C routines if needed: yes
configure: Enabling BGQ Thread Binding
configure: Configuring for double precision
configure: Configuring QDP++ with cb2 layout
configure: Parscalar build! Checking for QMP
checking for qmp-config... /homec/hbn28/hbn28e/local//bin/qmp-config
configure: Found QMP configuration program /homec/hbn28/hbn28e/local//bin/qmp-config
configure: QMP compile flags: -I/homec/hbn28/hbn28e/local/include
configure: QMP linking flags: -L/homec/hbn28/hbn28e/local/lib
configure: QMP libraries flags: -lqmp
checking if we can compile/link of a simple QMP C++ program... yes
Value of with_libxml2 is XX
checking for xml2-config... /usr/bin/xml2-config
configure: Found libxml2 configuration program
configure: libxml2 compile flags: -I/usr/include/libxml2
configure: libxml2 libraries flags: -lxml2 -lz -lm
checking if we can compile/link a simple libxml2 program... no
configure: error: Cannot compile/link a program with libxml2.
Use --with-libxml2=<dir> to select a working version.
В qdpxx/config.log
, соответствующий раздел это здесь:
configure:4321: checking for xml2-config
configure:4339: found /usr/bin/xml2-config
configure:4351: result: /usr/bin/xml2-config
configure:4370: Found libxml2 configuration program
configure:4374: libxml2 compile flags: -I/usr/include/libxml2
configure:4378: libxml2 libraries flags: -lxml2 -lz -lm
configure:4386: checking if we can compile/link a simple libxml2 program
configure:4434: /bgsys/local/gcc/4.9.3/bin/mpig++ -o conftest -O2 -finline-limit=50000 -I/usr/local/bg_soft/mpich3/include -Wall -Wpedantic -fdiagnostics-color=auto --std=c++11 -fopenmp -I/usr/include/libxml2 conftest.cpp -lxml2 -lz -lm >&5
conftest.cpp: In function 'int main()':
conftest.cpp:30:16: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *docname="foo";
^
conftest.cpp:28:13: warning: unused variable 'argc' [-Wunused-variable]
int argc ; char **argv ;
^
conftest.cpp:28:27: warning: unused variable 'argv' [-Wunused-variable]
int argc ; char **argv ;
^
conftest.cpp:29:19: warning: variable 'doc' set but not used [-Wunused-but-set-variable]
xmlDocPtr doc;
^
/usr/local/bg_soft/gcc/4.9.3/bin/../lib/gcc/powerpc64-bgq-linux/4.9.3/../../../../powerpc64-bgq-linux/bin/ld: cannot find -lxml2
/usr/local/bg_soft/gcc/4.9.3/bin/../lib/gcc/powerpc64-bgq-linux/4.9.3/../../../../powerpc64-bgq-linux/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
configure:4441: $? = 1
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "qdp++"| #define PACKAGE_TARNAME "qdp--"| #define PACKAGE_VERSION "1.44.0"| #define PACKAGE_STRING "qdp++ 1.44.0"| #define PACKAGE_BUGREPORT "[email protected]"| #define PACKAGE "qdp--"| #define VERSION "1.44.0"| #define QDP_ND 4
| #define QDP_NC 3
| #define QDP_NS 4
| #define QDP_AC_ALIGNMENT_SIZE 16
| #define QDP_USE_GENERIC_OPTS 1
| #define QDP_USE_BLUEGENEL 1
| #define BASE_PRECISION 64
| #define QDP_USE_CB2_LAYOUT 1
| #define ARCH_PARSCALAR 1
| #define QDP_USE_LIBXML2 1
| /* end confdefs.h. */
|
| #include <libxml/xmlmemory.h>
| #include <libxml/parser.h>
|
| int
| main ()
| {
|
| int argc ; char **argv ;
| xmlDocPtr doc;
| char *docname="foo";
| doc = xmlParseFile(docname);
| ;
| ;
|
| ;
| return 0;
| }
configure:4483: result: no
configure:4486: error: Cannot compile/link a program with libxml2.
Use --with-libxml2=<dir> to select a working version.
cannot find -lxml2
звучит как нет /usr/lib/libxml2.so
, И действительно, там нет ни одного. Бег locate libxml
дает следующие интересные строки:
/usr/include/libxml2/libxml/xpath.h
...
/usr/include/libxml2/libxml/xpointer.h
/usr/lib/libxml2.so.2
/usr/lib/libxml2.so.2.7.6
/usr/lib64/libxml2.so
/usr/lib64/libxml2.so.2
/usr/lib64/libxml2.so.2.7.6
По-видимому, 32-разрядная версия имеет странное так называемое имя, и только 64-разрядная версия имеет обычное имя. Пытаюсь добавить -L/usr/lib64
Оказалось, сломать другие вещи:
+ ./configure --prefix=/homec/hbn28/hbn28e/local/ --host=powerpc64-bgq-linux --build=powerpc64-unknown-linux-gnu --enable-bgq-thread-binding --enable-openmp --enable-parallel-arch=parscalar --enable-precision=double --enable-parallel-io --enable-qdp-alignment=128 --with-qmp=/homec/hbn28/hbn28e/local/ 'CFLAGS=-O2 -finline-limit=50000 -I/usr/local/bg_soft/mpich3/include -Wall -Wpedantic -fdiagnostics-color=auto --std=c99 -fopenmp --std=gnu99' 'CXXFLAGS=-O2 -finline-limit=50000 -I/usr/local/bg_soft/mpich3/include -Wall -Wpedantic -fdiagnostics-color=auto --std=c++11 -fopenmp' LDFLAGS=-L/usr/lib64/ LIBS= CC=/bgsys/local/gcc/4.9.3/bin/mpigcc CXX=/bgsys/local/gcc/4.9.3/bin/mpig++
checking for C++ compiler default output file name...
configure: error: in `/homec/hbn28/hbn28e/qdpxx':
configure: error: C++ compiler cannot create executables
See `config.log' for more details.
В файле журнала говорится следующее:
configure:2159: /bgsys/local/gcc/4.9.3/bin/mpig++ -O2 -finline-limit=50000 -I/usr/local/bg_soft/mpich3/include -Wall -Wpedantic -fdiagnostics-color=auto --std=c++11 -fopenmp -L/usr/lib64/ conftest.cpp >&5
/usr/local/bg_soft/gcc/4.9.3/bin/../lib/gcc/powerpc64-bgq-linux/4.9.3/../../../../powerpc64-bgq-linux/lib/crt1.o: In function `_start_no_magic':
(.text+0x58): undefined reference to `__libc_no_magic_start_main'
/bgsys/local/gcc/4.9.3/powerpc64-bgq-linux/lib/libdl.so.2: undefined reference to `_dl_addr_range@GLIBC_PRIVATE'
collect2: error: ld returned 1 exit status
configure:2163: $? = 1
configure:2201: result:
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "qdp++"| #define PACKAGE_TARNAME "qdp--"| #define PACKAGE_VERSION "1.44.0"| #define PACKAGE_STRING "qdp++ 1.44.0"| #define PACKAGE_BUGREPORT "[email protected]"| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:2207: error: in `/homec/hbn28/hbn28e/qdpxx':
configure:2210: error: C++ compiler cannot create executables
Кажется, что я только что отбросил все другие пути, где могут находиться библиотеки, так что больше ничего не строится.
Попытка создать символическую ссылку из /usr/lib/libxml2.so.2
в $HOME/libxml2.so
и добавление -L$HOME
тоже не сработало.
На этом этапе я прекратил установку всей системы и попытался установить libxml2
из хранилища Git. Итак, я клонировал репозиторий и набрал ./autogen.sh
, Это не удалось сказать:
Checking zlib
./configure: line 12546: syntax error near unexpected token `Z,zlib,'
./configure: line 12546: ` PKG_CHECK_MODULES(Z,zlib,'
Автоинструменты там утверждают, что это версия 2.69. Это та же версия, установленная на кластере университета (где он также не работает). На моей рабочей станции Fedora 24 установлена та же версия, но ./autogen.sh
просто пробегает и создает Makefile
,
Я немного растерялся сейчас. Есть ли ошибка в скрипте сборки libxml2
если это не удается на ppc64
RedHat, а также на amd64
Университетский кластер Debian, но не мой x86_64
Ноутбук Fedora?
Как я мог получить configure
сценарий qdpxx
использовать общесистемную установку libxml2
? Он уже извлекает правильные флаги, используя xml2-config
:
configure: libxml2 compile flags: -I/usr/include/libxml2
configure: libxml2 libraries flags: -lxml2 -lz -lm
Что я могу сделать для дальнейшей компиляции моей программы?
Бег ln -fs /usr/share/aclocal/pkg.m4 .
в исходном каталоге сделано configure
находить PKG_PROG_PKG_CONFIG
, Тем не менее, синтаксическая ошибка все еще существует. Перезапуск autoreconf
создал configure
файл, который теперь не имеет синтаксических ошибок больше.
Других решений пока нет …