2016-06-23 12 views
1

Ich versuche, einen Client für ein Schulprojekt zu starten, das eine in Lua entwickelte KI hat. Ich habe llulla.so in einem/lib/-Ordner im Stammverzeichnis meines Programms hinzugefügt Mappe.Fehler beim Laden gemeinsam genutzter Bibliotheken: llllua.so

Nach dem Kompilieren und das Programm startet, erhalte ich folgende Fehlermeldung:

./zappy_ai: error while loading shared libraries: liblua.so: cannot open shared object file: No such file or directory

Von dem, was ich verstehe ich etwas bei der Zusammenstellung für mein Programm tun müssen wissen, wo meine gemeinsame Bibliothek befindet.

Hier ist der relevante Teil meiner Makefile:

CXX    =  g++ 

BASE_FLAGS  =  -Wall -Wextra -Iincludes 

AI_NAME   =  zappy_ai 

AI_PATH   =  ./sources/client/ 

AI_FLAGS  =  $(BASE_FLAGS)     \ 
         -L./lib/      \ 
         -I./includes/client/   \ 
         -I./include/     \ 
         -std=c++11      \ 

AI_LDFLAGS  =  -llua 

AI_SRCS   =  main.cpp      \ 
         Client.cpp      \ 
         Params/Params.cpp    \ 
         Params/Option.cpp    \ 
         SocketTCP.cpp     \ 
         Misc/Error.cpp 

AI_OBJS   =  $(addprefix $(AI_PATH), $(AI_SRCS:.cpp=.cpp.o)) 

%.cpp.o   :  %.cpp 
         @printf "%b[Compilation]%b %-50s" $(BLUE) $(RESET) $< 
         @$(CXX) $(FLAGS) -c $< -o [email protected] 
         @printf "%bOK%b\n" $(GREEN) $(RESET) 

$(AI_NAME)  :  FLAGS = $(AI_FLAGS) 
$(AI_NAME)  :  $(AI_OBJS) 
         @$(CXX) $^ -o [email protected] $(AI_LDFLAGS) 
         @printf "%b[Message]%b AI compilation done\n\n" $(YELLOW) $(RESET) 

Was sollte ich hinzufügen, um mein Programm in der Lage sein zu starten und es habe meine gemeinsame Bibliothek finden?

+1

Möglicherweise müssen Sie 'ldconfig' ausführen oder'/usr/local/lib' in '/ etc/ld.so.conf' einfügen, wenn Sie' lua' aus dem Quellcode kompiliert haben –

Antwort

1

TLDR:

$ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:./lib" ./zappy_ai 

längere Erklärung:

haben Sie dynamisch

verknüpft
zappy_ai 

gegen

./lib/liblua.so 

von

LDFLAGS = -L./lib/ 

und

LDLIBS = -llua 

Die resultierenden zappy_ai ausführbaren Verwendung erfordert, dass gleiche ./lib/ innerhalb der LD_LIBRARY_PATH Umgebungsvariable vorhanden sein, wenn der dynamische Linker/loader die -llua Symbole, die zappy_ai Verwendungen zu lösen versucht .