개발자/Raspberry Pi3

라즈베리파이3 B+ 데이터베이스 설치 실행 문제, error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or director

지구빵집 2019. 10. 9. 19:31
반응형

 

 

라즈베리파이3 B+ 데이터베이스 설치 실행 문제, error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or director 

 

이전 버전의 라즈베리파이를 라즈베리파이3 B+ 에서 돌아가는 프로그램으로 모두 바꾸고 있는 중에 데이터베이스 문제가 여러가지 발생했다. 일단 다른 문서를 참고(라즈베리파이에 APM 설치)하여 그대로 설치한다. 설치 후 문제는 아래와 같이 해결한다.

 

라즈베리파이에서 mysql 설치시 mariadb가 설치가 된다. 말 그대로다. $sudo apt-get install mysql-server 명령어로 mysql 설치를 하면 mariadb가 설치가 된다. 설치 후, mysql 명령어로 실행을 해봐도 아래처럼 mariaDB가 실행이 됨을 알 수 있다.

 

pi@raspberrypi:~$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

 

1. 설치를 다하고 다음과 같은 문제가 발생 - Error installing libmysqlclient-dev to C programming 문제 해결

 

$sudo apt-get update

$sudo apt-get upgrade

$sudo apt-get install libmysqlclient-dev

로 실행하는데 마지막 libmysqlclient 줄을 다음과 같이 실행한다.

 

$sudo apt-get install libmariadbclient-dev

 

그러면 아래와 같이 잘 설치가 된다.

 

pi@raspberrypi:~ $sudo apt-get install libmysqlclient-dev

내려받기 1,574 k바이트, 소요시간 1초 (1,180 k바이트/초)
Selecting previously unselected package libmariadbclient-dev.
(데이터베이스 읽는중 ...현재 142839개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../libmariadbclient-dev_10.1.38-0+deb9u1_armhf.deb ...
Unpacking libmariadbclient-dev (10.1.38-0+deb9u1) ...
libmariadbclient-dev (10.1.38-0+deb9u1) 설정하는 중입니다 ...
Processing triggers for man-db (2.7.6.1-2) ...
pi@raspberrypi:~ $

 

2. 이 문제는 좀 애매하게 해결을 했는데 일단 경로문제라고 보여진다. error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory  

 

경로를 추가하고 이것 저것 했는데 아래처럼 해결하기 바란다. 

 

파일을 열어서 아래처럼 경로를 수정하고 저장한다.

$sudo nano /etc/ld.so.conf  이렇게 파일을 열어서 

# cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
/usr/local/mysql/lib

 

3. 데이터베이스를 사용한 프로그램을 라이브러리를 바꾼다. 에러 메세지는 아래와 같이 나온다.

 

$gcc -o server_farm farm_main.o farm_sensor.o /home/pi/iot_farmserver/libs/libiot.a -lmysqlclient -lpthread -lwiringPi
/usr/bin/ld: cannot find -lmysqlclient

 

즉, 컴파일 할 때 기존 mysql 라이브러리를 사용해서 컴파일 하므로 문제가 생긴다. 여기서 -lmysqlclient 문장을 -lmariadbclient 로 바꿔주면 컴파일 잘된다.

 

수정 파일은 \\192.168.0.71\pi\iot_farmserver\src\farm 아래의 메이크 파일이다.

 

참고로 메이크 파일의 수정부분을 코드블럭으로 보여준다.

 

INC += 
LIBS += -lmariadbclient -lpthread -lwiringPi
CFLAGS = -g -c $(INC) 
OBJECTS = farm_main.o farm_sensor.o
SRCS =  farm_main.c farm_sensor.c
DEFINES = 
TARGET = server_farm

 

다른 문제를 가지고 있다면 답글에 문의 바랍니다. 개발자의 공유는 1만 줄의 코드보다 강하다. -見河-

 

이미지출처: 여기로 가시면 됩니다.

사이트 주소를 직접 쓰면 폰에서 화면이 움직이므로 글에 링크를 거는 방향으로 가야한다.

 

 

 

 

반응형