Почему я получаю ошибку времени выполнения после того, как я связал общую библиотеку в нестандартном месте? - PullRequest
3 голосов
/ 09 мая 2011

Я новичок в Linux.Я написал приложение, которое использует MySQL, и его Makefile опубликован следующим образом:

OBJ = main.o PeerDbOpMgr.o
MYSQL_INC = ./mysql/include
LNK_MYSQL = ./mysql/lib/ -lmysql

main : $(OBJ) 
    g++ -g -o main $(OBJ) -L$(LNK_MYSQL) -lpthread -lm

main.o : main.cpp
    g++ -g -c -I$(MYSQL_INC) main.cpp


PeerDbOpMgr.o : PeerDbOp.cpp PeerDbOp.h
    g++ -g -c -I$(MYSQL_INC) PeerDbOp.cpp -o PeerDbOpMgr.o

clean : 
    rm main $(OBJ) 

Я успешно скомпилировал его.Но когда я запустил его, он показал ошибку:

. / Main: ошибка при загрузке общих библиотек: libmysql.so.16: не удается открыть файл общего объекта: нет такого файла или каталога

Файл libmysql.so.16 находится под ./mysql/lib/libmysql.so.16, но почему он говорит, что такого файла или каталога нет?

1 Ответ

7 голосов
/ 09 мая 2011

Вы связали свое приложение с библиотекой, которая не находится в пути компоновщика во время выполнения. Ваше приложение должно работать, когда вы запускаете его так: env LD_LIBRARY_PATH=./mysql/lib ./main

Руководства для чтения: ld (1), ldconfig (8)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...