2016-04-13 6 views
0

Ich versuche pugixml.hpp in meinem Code enthalten unter Verwendung der folgenden Notation umfassen:g ++ Kompilation undefinierte Referenzen auf externe HPP-Datei

Nun ist die seltsame Sache ist, diese läuft in Codeblöcke in Ordnung, aber wenn ich versuche, laufen sie über den Anschluss (ich alle Quellcodes in einer einzigen Datei) mit g ++: ein Bündel von undefined reference to pugi::xml.. (je nachdem, was die api ich war mit)

g++-5 -v -std=c++11 -03 -Wall -pedantic -fopenmp -pthread main.cpp -o main.o 

es wirft. Ich habe alles versucht, indem ich die pugixml.hpp-Datei im Hauptverzeichnis aufbewahre, indem ich einige Flags wie -iquote oder -c hinzufüge, um auf dieses Verzeichnis zu zeigen. Aber nichts funktioniert. Was sollte ich noch versuchen? Ich schließe die Ausgabe bis Verzeichnissuche hier:

Using built-in specs. 
COLLECT_GCC=g++-5 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper 
Target: x86_64-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.2.1-23ubuntu1~12.04' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=gcc4-compatible --disable-libstdcxx-dual-abi --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 
Thread model: posix 
gcc version 5.2.1 20151031 (Ubuntu 5.2.1-23ubuntu1~12.04) 
COLLECT_GCC_OPTIONS='-v' '-std=c++11' '-O3' '-Wall' '-Wpedantic' '-fopenmp' '-pthread' '-o' 'main.o' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' 
/usr/lib/gcc/x86_64-linux-gnu/5/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D_REENTRANT main.cpp -quiet -dumpbase main.cpp -mtune=generic -march=x86-64 -auxbase main -O3 -Wall -Wpedantic -std=c++11 -version -fopenmp -fstack-protector -Wformat-security -o /tmp/ccXfMWIT.s 
GNU C++11 (Ubuntu 5.2.1-23ubuntu1~12.04) version 5.2.1 20151031 (x86_64-linux-gnu) 
    compiled by GNU C version 5.2.1 20151031, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9 
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/5" 
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/include/c++/5 
/usr/include/x86_64-linux-gnu/c++/5 
/usr/include/c++/5/backward 
/usr/lib/gcc/x86_64-linux-gnu/5/include 
/usr/local/include 
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed 
/usr/include/x86_64-linux-gnu 
/usr/include 
End of search list. 
+1

Link erforderliche Bibliotheken. – MikeCAT

+0

Ich habe alle benötigten Bibliotheken mit dem "#include" verknüpft. pugixml benötigt nur zwei Dateien, pugixml.hpp und pugixmlconfig.hpp. –

+0

Möglicherweise müssen Sie den Include-Pfad in der Befehlszeile angeben. (dh. 'g ++ -I/Pfad/zu/enthält ...'). – callyalater

Antwort

1

Sie müssen gegen die kompilierte pugixml Bibliothek verknüpfen. Einschließlich der pugixml.hpp teilt einfach der Präprozessor die Schnittstelle, aber der Compiler (genauer gesagt der Linker) muss den entsprechenden kompilierten pugixml Code finden, damit er aus Ihrem Quellcode verwendbar ist.

+0

bedeuten u i muß in der Codekompilierung verknüpfen pugixml.o? die Flagge macht das? –

+0

@KoustuvSinha [Diese Website] (https://courses.cs.washington.edu/courses/cse326 /02wi/unix/g++.html) könnte helfen – callyalater

+0

@Koustav Sinha: Ja, ich habe gcc seit langer Zeit nicht mehr direkt von der Kommandozeile aus benutzt, aber ich glaube, du machst das mit dem -o wäre target_link_libraries(). –