2016-11-14 1 views
0

System Weit libxml2

ich die Chroma-Suite von Physik-Simulationen auf dem Supercomputer JUQUEEN kompilieren wollen, die ein IBM Bluegene/Q-Installation ist. Die Frontends laufen auf RedHat Linux 6. Architektur ist PowerPC 7 sowohl auf Frontend als auch auf Compute Nodes. Die verwendeten CPUs unterscheiden sich jedoch, das Frontend verfügt über IBM Power 740, die Rechenknoten sind IBM Power A2-Chips. Compiler wie mpigcc und mpig++ kompilieren automatisch für die Compute-Knoten kompilieren.Systemweite libxml2 nicht funktioniert, Zusammenstellung von Quellen failes in configure

Moderne Versionen von Programmen können mit module in den Pfad geladen werden. Es gibt Abhängigkeiten von zwei anderen Bibliotheken, die kompiliert werden müssen. Ich bin fertig mit qmp für jetzt. qdpxx hängt auch von libxml2 und das ist, wo ich steckte:

chroma --- qdpxx --- qmp 
       \-- libxml2 

Auf meinem Fedora 24 Workstation, ich qdpxx ganz gut mit der systemweiten Installation von libxml2 zusammenstellen kann. Ich habe gerade die RPM-Pakete libxml2 und libxml2-devel installiert und musste keine -with-libxml2=DIR Argumente zu qdpxx/configure angeben.

Auf der Supercomputer-Frontend, bekomme ich diese:

+ ./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. 

In qdpxx/config.log, der entsprechende Abschnitt dieses hier ist:

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. 

Die cannot find -lxml2 klingt nicht dort /usr/lib/libxml2.so ist. Und tatsächlich, dort ist keiner. Laufen locate libxml gibt die folgenden interessanten Linien:

/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 

Anscheinend ist die 32-Bit-Version einen seltsamen so Namen hat und nur die 64-Bit-Version hat einen regelmäßigen so Namen. Der Versuch, -L/usr/lib64 hinzuzufügen stellte sich heraus, andere Dinge zu brechen:

+ ./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. 

In der Log-Datei, sagt er folgendes:

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 `[email protected]_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 

Es scheint, dass ich weggeschmissen nur alle anderen Pfade, wo Bibliotheken solche befinden können dass nichts mehr baut.

Der Versuch, einen symbolischen Link von /usr/lib/libxml2.so.2 bis $HOME/libxml2.so zu erstellen, und adding -L$HOME hat auch nicht funktioniert.

Versuch libxml2 zu Kompilieren von Git

An dieser Stelle ich die systemweite Installation gestoppt verfolgt und versuchte libxml2 aus der Git-Repository zu installieren. Also habe ich das Repository geklont und ./autogen.sh eingegeben. Dies versagte mit:

Checking zlib 
./configure: line 12546: syntax error near unexpected token `Z,zlib,' 
./configure: line 12546: ` PKG_CHECK_MODULES(Z,zlib,' 

Die Autotools dort behaupten, Version 2.69 zu sein. Dies ist dieselbe Version, die auf dem Universitätscluster installiert ist (wo es auch fehlschlägt). Auf meiner Fedora 24-Workstation ist dieselbe Version installiert, aber ./autogen.sh läuft gerade durch und erstellt eine Makefile.


Ich bin jetzt ein bisschen verloren. Gibt es einen Fehler im Build-Skript von libxml2, wenn es auf dem ppc64 RedHat und auch auf dem amd64 Debian-Hochschulcluster aber nicht meinem x86_64 Fedora-Laptop scheitert?

Wie konnte ich das configure Skript von qdpxx die systemweite Installation von libxml2 verwenden? Es spielt extrahiert bereits die richtigen Fahnen mit xml2-config:

configure: libxml2 compile flags: -I/usr/include/libxml2 
configure: libxml2 libraries flags: -lxml2 -lz -lm 

Was kann ich tun, um mein Programm weiter zusammengestellt zu erhalten?

+0

Versuchen Sie, das Ziel auf 'ppc64' oder' powerpc64' zu setzen. Dies sollte automatisch Ihren Code zu 64-Bit-Binärcode erstellen. – alvits

+3

nicht versionierte Shared Libraries werden normalerweise von '* -devel'-Paketen bereitgestellt. Dies sind nur Links zu der versionierten Bibliothek. Dies bedeutet, dass nur 'libxml2-devel. * 64' installiert ist. Die 32-Bit-Version ist nicht installiert. – alvits

+0

Um den 'PKG_CHECK_MODULES' Fehler zu lösen, installieren Sie einfach' pkg-config'. Sie können auch einen Tarball einer offiziellen libxml2-Version herunterladen, die mit einem vorgefertigten Konfigurationsskript ausgeliefert wird. Aber ich würde wirklich versuchen, den Build mit libxml2 des Systems zuerst zu arbeiten. Wenn der @alvits-Vorschlag nicht funktioniert, wie wäre es dann, den Symlink manuell zu erstellen? – nwellnhof

Antwort

0

Ausführen ln -fs /usr/share/aclocal/pkg.m4 . im Quellverzeichnis gemacht configure finden PKG_PROG_PKG_CONFIG. Allerdings gibt es immer noch den Syntaxfehler herum. Rerunning autoreconf erstellt eine configure Datei, die jetzt keine Syntaxfehler mehr hat.