2014-11-26 7 views
5

Starałem się zbudować pierwszy commit git czyli popełnić e83c516 Co wychodził był błąd linkera jak pokazano poniżejRozwiązywanie niezdefiniowanej bibliotekę odniesienia łączącą błąd w gcc

$ make                      
gcc -g -Wall -o update-cache update-cache.o read-cache.o -lssl                   
/usr/bin/ld: update-cache.o: undefined reference to symbol '[email protected]@libcrypto.so.10'            
/usr/bin/ld: note: '[email protected]@libcrypto.so.10' is defined in DSO /lib64/libcrypto.so.10 so try adding it to the linker command line 
/lib64/libcrypto.so.10: could not read symbols: Invalid operation                  
collect2: error: ld returned 1 exit status                        
make: *** [update-cache] Error 1                          



$ cat Makefile                    
CFLAGS=-g -Wall                       CC=gcc                                 
PROG=update-cache show-diff init-db write-tree read-tree commit-tree cat-file               

all: $(PROG)                                 
install: $(PROG)                              
     install $(PROG) $(HOME)/bin/                                                       
LIBS= -lssl                                  
init-db: init-db.o 

update-cache: update-cache.o read-cache.o 
     $(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS) 

show-diff: show-diff.o read-cache.o 
    $(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS) 

więc istnieją pewne błędy łącznikowe w ten . Próbowałem go znaleźć, przeszukałem kilka miejsc, aby znaleźć to za pomocą powyższego komunikatu o błędzie, ale przy odrobinie szczęścia. Głównie nie było wiele linków ze stackoverflow, które pomogły. Wyjaśniam proces, który podjąłem, aby znaleźć to poniżej.

Odpowiedz

9

Przeczytałem this really nice post wyjaśniając linkowanie biblioteki do mnie. Sugeruję, aby każdy, kto borykał się z podobnym problemem, najpierw przeczytał.

Więc pomogę nowemu użytkownikowi, aby przeanalizować komunikat o błędzie. Problem polega na tym, że nie jest on w stanie znaleźć biblioteki kryptograficznej. Najpierw musimy połączyć tę bibliotekę.

Dodaje się -lcrypto do listy bibliotek LIBS. Jak to rozgryzłem. Sprawdź brakującą bibliotekę w komunikacie o błędzie /usr/bin/ld: update-cache.o: undefined reference to symbol '[email protected]@libcrypto.so.10'. Musisz dowiedzieć się krypto część z lib crypto .so.10

LIBS= -lssl -lcrypto 

Kiedy robisz, że masz podobny komunikat o błędzie:

/usr/bin/ld: update-cache.o: undefined reference to symbol 'deflate'                 
/usr/bin/ld: note: 'deflate' is defined in DSO /lib64/libz.so.1 so try adding it to the linker command line       
/lib64/libz.so.1: could not read symbols: Invalid operation                   
collect2: error: ld returned 1 exit status 

Teraz wiesz co do zrobienia. Dodaj bibliotekę -lz. Więc wreszcie LIBS wygląda jak poniżej

LIBS= -lssl -lcrypto -lz 

to w jaki sposób można rozwiązać podobne błędy linkera (i skompilować pierwszy commit git).

Mam nadzieję, że to pomoże :)

Powiązane problemy