2016-07-30 19 views
0

Ich versuche, die NBIS Bibliothek auf OS X zu verwenden, aber ich bin immer ein Problem:Linkers nicht mit NBIS Bibliothek

Undefined symbols for architecture x86_64: 
    "distance(int, int, int, int)", referenced from: 
     _main in test-2db11c.o 
ld: symbol(s) not found for architecture x86_64 

ich versucht mit dem .a Archiv, sowie die .o Dateien dort - kein Glück - dasselbe Problem.

Der Quellcode I (test.cpp) zu kompilieren, ich versuche:

#include <iostream> 
#include <lfs.h> 

using namespace std; 

int main() { 
    cout << distance(1, 2, 3, 4) << endl; 
} 

Hier sind die Ausführungs Linien, die ich (erfolglos) versucht:

$> g++ -std=c++11 -ggdb -g -Wall test.cpp -o test.bin -lm -lc++ 
$> g++ -std=c++11 -ggdb -g -Wall test.cpp -o test.bin -lm -lc++ -L/NBIS/Main/lib -lmindtct 
$> g++ -std=c++11 -ggdb -g -Wall test.cpp -o test.bin -lm -lc++ -L/NBIS/Main/lib -l:libmindtct.a 
$> g++ -std=c++11 -ggdb -g -Wall test.cpp /NBIS/Main/lib/libmindtct.a -o test.bin -lm -lc++ 
$> g++ -std=c++11 -ggdb -g -Wall test.cpp /NBIS/Main/lib/util.o -o test.bin -lm -lc++ 

nur um zu bestätigen, dass die Bibliotheken tatsächlich habe ich die Methode deklariert, ich habe überprüft, was in der libmindtct.a Archiv ist:

$> ar t libmindtct.a 
__.SYMDEF SORTED 
<MANY FILES .o> 
util.o 
<SOME MORE .o FILES> 

$> ar -x libmindtct.a util.o 
$> nm util.o 
       U ___stderrp 
00000000000008d0 T _angle2line 
       U _atan2 
0000000000000a10 T _closest_dir_dist 
0000000000000600 T _distance 
00000000000008a0 T _find_incr_position_dbl 
       U _fmod 
       U _free 
       U _fwrite 
0000000000000650 T _in_int_list 
0000000000000920 T _line2direction 
       U _malloc 
0000000000000000 T _maxv 
0000000000000360 T _minmaxs 
00000000000001b0 T _minv 
0000000000000690 T _remove_from_int_list 
0000000000000630 T _squared_distance 

Um die Bibliothek verwende ich die folgenden kompilieren:

$> cd ~/Downloads/NBIS/ 
$> ./setup.sh /NBIS/Main --64 
$> make config && make it && make install LIBNBIS=no && make catalog 
+0

Link-Angelegenheiten bestellen, versuchen 'g ++ -std = c 11 ++ test.cpp -o test.bin -lname' nehme an Ihrer Bibliothek Name ist' libname.a' Und wenn ich mich nicht täusche, in OSX Ihr Programm ist standardmäßig mit der Mathematikbibliothek verknüpft. Also ist "-lm" überflüssig. Und ich verstehe nicht, was Sie versuchen, durch 'lC++' – sjsam

+0

Bitte lesen Sie die Frage. Dies kommt einer Lösung nicht einmal nahe. Auch, http://libcxx.llvm.org/ – RafazZ

+0

BTW, schlug ich nicht eine Lösung vor, ich sagte nur eine der Art, wie Sie es kompiliert haben, ist falsch. Im Allgemeinen legen Sie die Linkeroptionen nach der Option "-o output" in der Reihenfolge fest, in der die Bibliotheken verknüpft werden müssen. Zum Beispiel ist 'gcc -lm in.c -o in.out' anders als' gcc in.c -o in.out -lm', wobei ersteres in meinem Linux fehlschlagen würde, wenn ich eine Funktion aus der Math-Bibliothek verwende .Forgive mich mit meinem Kommentar zu 'lC++', ich nicht bekommen, was Ihnen viel Glück zu erreichen versuchten :) – sjsam

Antwort

0

lfs.h von NBIS ist nur C. Sie benötigen C-Bindung für lfs.h aktivieren:

extern "C" { 
     #include <lfs.h> 
} 

Zusätzlich sollten Sie nicht manuell brauchen libc++ oder libmg++ mit verbinden.