Clang összekapcsolása error: undefined reference to függvény hívások hozzá LLVM menetben

szavazat
0

Tehát én ezt követően bemutató https://www.cs.cornell.edu/~asampson/blog/llvm.html , hogy egy menetben, hogy az eszközök egy programot hozzáadásával hívásokat egy külső függvény (amely logop a rtlib.c) . De ellentétben a bemutató igyekszem eszköz egy nagyobb kód-bázis, amely masstree: https://github.com/kohler/masstree-beta .

Tehát az utasítás a masstree futok ./configure-t először, de aztán szerkeszteni a generált Makefile használni csengés (ahelyett gcc / g ++) és futtatni a labdát. Azt is hozzá rtlib.c a masstree forrás fájlokat, hogy ez lesz alakítjuk rtlib.o a többi masstree forrás fájlokat. Itt látható a megfelelő része a módosított Makefile én változások kiemelt nyíllal (én is hozzá a $ (rtlib) linkelni más .o fájl generálására futtatható):

AR = ar
rtlib = rtlib.o  <===
CC2 = clang -w -v -Xclang -load -Xclang  /.../llvm-3.4/Release+Asserts/lib/SkeletonPass.so `llvm-config --cflags` 
CXX2 = clang++ -v -w -Xclang -load -Xclang /.../llvm-3.4/Release+Asserts/lib/SkeletonPass.so -std=c++11 `llvm-config --cppflags --libs --cflags --cxxflags core --ldflags` <===
CC = clang -v <===
CXX = clang++ -v -std=c++11 <===
CPPFLAGS = 
CXXFLAGS = -g -W -Wall -O3
DEPSDIR := .deps
DEPCFLAGS = -MD -MF $(DEPSDIR)/$*.d -MP
ifeq ($(strip $(MEMMGR)), )
  MEMMGR = 
endif
ifneq ($(strip $(KEYSWAP)), )
  CPPFLAGS += -DKEYSWAP
endif
ifneq ($(strip $(NOPREFETCH)), )
  CPPFLAGS += -DNOPREFETCH
endif
ifneq ($(strip $(NOSUPERPAGE)), )
  CPPFLAGS += -DNOSUPERPAGE
endif
LIBS =  -lpthread -lm
LDFLAGS = 

all: test_atomics mtd mtclient mttest

%.o: %.c config.h $(DEPSDIR)/stamp
    $(CXX2) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS) -include config.h -c -o $@ $<

%.o: %.cc config.h $(DEPSDIR)/stamp
    $(CXX2) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS) -include config.h -c -o $@ $<

%.S: %.o
    objdump -S $< > $@

libjson.a: json.o string.o straccum.o str.o msgpack.o \
    clp.o kvrandom.o compiler.o memdebug.o kvthread.o
    @/bin/rm -f $@
    $(AR) cru $@ $^

KVTREES = query_masstree.o \
    value_string.o value_array.o value_versioned_array.o \
    string_slice.o

mtd: mtd.o log.o checkpoint.o file.o misc.o $(rtlib) $(KVTREES) \
    kvio.o libjson.a
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

mtclient: mtclient.o misc.o testrunner.o kvio.o $(rtlib) libjson.a
    $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)

mttest: mttest.o misc.o checkpoint.o $(rtlib) $(KVTREES) testrunner.o \
    kvio.o libjson.a
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

test_string: test_string.o string.o $(rtlib) straccum.o compiler.o
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

test_atomics: test_atomics.o string.o straccum.o kvrandom.o $(rtlib) \
    json.o compiler.o kvio.o
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

jsontest: jsontest.o string.o straccum.o json.o compiler.o $(rtlib)
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

msgpacktest: msgpacktest.o string.o straccum.o json.o compiler.o msgpack.o $(rtlib)
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

scantest: scantest.o compiler.o misc.o $(rtlib) $(KVTREES) libjson.a
    $(CXX) $(CXXFLAGS) -o $@ $^ $(MEMMGR) $(LDFLAGS) $(LIBS)

ÉN használ CC2 és CXX2 generálni a műszerekkel .o fájl, míg a CC és CXX kapcsolni őket végrehajtható. Itt van a hiba kapok, amikor elindul is:

mtd.o: A funkció main': /home/.../masstree-beta-master/mtd.cc:730: undefined reference tologop '/home/.../masstree-beta-master/mtd.cc:730: undefined reference to logop' /home/.../masstree-beta-master/mtd.cc:732: undefined reference tologop' /home/.../masstree-beta-master/mtd.cc:732 : undefined reference to logop' /home/.../masstree-beta-master/mtd.cc:736: undefined reference tologop 'mtd.o: / home /.../ masstree-béta-master / mtd.cc: 736: meghatározatlan utalásokat `logop' nyomon clang: error: linker parancs meghiúsult exit 1-es kód (használat -v, hogy hívása) Márka: *** [MTD] Error 1.

Valami ötlet, hogy miért van a hivatkozás én funkciót logop (ami rtlib.c) definiálatlan, bár hozzáteszem rtlib.o az összekötő rész generál futtatható?

Nagyon szépen köszönöm!

A kérdést 14/01/2017 11:17
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

A szimbólum exportált nem volt ugyanaz. Megnéztem a nm --format sysv *file.o*bizonyosodni, hogy a szimbólumok exportált rtlib.o és bárhol is járunk el.

Válaszolt 16/01/2017 11:04
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more