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
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
Bitte lesen Sie die Frage. Dies kommt einer Lösung nicht einmal nahe. Auch, http://libcxx.llvm.org/ – RafazZ
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