2014-11-26 16 views
5

stavo cercando di costruire il primo commit di git cioè commettere e83c516 Quello che ho affrontato è stato un errore di linker come illustrato di seguitoSolving biblioteca di riferimento definito errore durante il collegamento in 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) 

Quindi ci sono alcuni errori del linker in questo . Ho provato a cercarlo, ho cercato in vari posti per capirlo usando il messaggio di errore qui sopra con poca fortuna. Principalmente non ci sono stati molti collegamenti da Stackoverflow che hanno aiutato. Sto spiegando il processo che ho preso per capirlo di seguito.

risposta

9

Ho letto this really nice post spiegando la libreria che mi collega. Suggerirei a chiunque abbia problemi simili di leggerlo prima.

Quindi aiuterò il nuovo utente a analizzare il messaggio di errore. Il problema è che non è in grado di trovare la libreria crittografica. Quindi avremo bisogno di collegare prima quella libreria.

Aggiungere -lcrypto all'elenco librerie LIBS. Come l'ho capito? Guarda la libreria mancante nel messaggio di errore /usr/bin/ld: update-cache.o: undefined reference to symbol '[email protected]@libcrypto.so.10'. È necessario capire la Crypto parte da lib cripto .so.10

LIBS= -lssl -lcrypto 

Una volta fatto questo si ottiene un messaggio di errore simile:

/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 

Ora sapete cosa fare. Aggiungi libreria -lz. Così alla fine LIBS si presenta come quella qui sotto

LIBS= -lssl -lcrypto -lz 

Ecco come risolvere errori del linker simili (e compilare il primo commit git).

Spero che questo aiuti :)