23.8.4.1 C API 클라이언트 프로그램 구축
이 섹션에서는 MySQL C API를 사용하는 C 프로그램의 컴파일 지침을 제공합니다.
Unix에서 MySQL 클라이언트의 컴파일
MySQL 헤더 파일을 사용하는 클라이언트 프로그램의 컴파일시에 컴파일러가 그들을 찾을 수 있도록 -I
옵션을 지정할 필요가있을 수 있습니다. 예를 들어, 헤더 파일이 /usr/local/mysql/include
에 설치되어있는 경우 컴파일 명령에이 옵션을 사용합니다.
-I/usr/local/mysql/include
링크 명령에서 -lmysqlclient
옵션을 사용하여 MySQL 클라이언트를 링크해야합니다. 링커에 라이브러리를 찾을 위치를 전달하기 위해 -L
옵션을 지정해야하는 경우도 있습니다. 예를 들어, 라이브러리가 /usr/local/mysql/lib
에 설치되어있는 경우 링크 명령에이 옵션을 사용합니다.
-L/usr/local/mysql/lib -lmysqlclient
경로 이름은 사용하는 시스템에서 다를 수 있습니다. 필요에 따라 -I
옵션과 -L
옵션을 조정하십시오.
Unix에서 MySQL 프로그램의 컴파일을 쉽게하려면 mysql_config 스크립트를 사용합니다. 섹션 4.7.2 "mysql_config - 클라이언트 컴파일 용 옵션보기" 를 참조하십시오.
mysql_config는 컴파일 및 링크에 필요한 옵션을 표시합니다.
shell>mysql_config --cflags
shell>mysql_config --libs
그 명령을 실행하여 올바른 옵션을 취득하고이를 수동으로 컴파일 또는 링크 명령에 추가 할 수 있습니다. 또는 mysql_config의 출력을 역 인용 부호를 사용하여 명령 행에 직접 포함합니다.
shell>gcc -c `mysql_config --cflags` progname.c
shell>gcc -o progname progname.o `mysql_config --libs`
Microsoft Windows에서 MySQL 클라이언트의 컴파일
헤더 및 라이브러리 파일의 위치를 지정하려면 개발 환경에서 제공되는 기능을 사용합니다.
Windows에서 C API 클라이언트를 구축하려면 C 클라이언트 라이브러리 외에도 Windows ws2_32 소켓 라이브러리 및 Secur32 보안 라이브러리에 링크해야합니다.
Windows에서 코드를 동적 또는 정적 C 클라이언트 라이브러리와 링크 할 수 있습니다. 정적 라이브러리는 mysqlclient.lib
라는 이름으로 동적 라이브러리 libmysql.dll
라는 이름입니다. 또한 동적 라이브러리를 사용하기 위해 libmysql.lib
정적 임포트 라이브러리가 필요합니다.
정적 라이브러리와 링크하는 경우 이러한 상황이 충족되지 않으면 오류가 발생할 수 있습니다.
클라이언트 응용 프로그램은 라이브러리를 컴파일하는 데 사용되는 Visual Studio 동일한 버전으로 컴파일해야합니다.
클라이언트 응용 프로그램은
/MT
컴파일러 옵션을 사용하여 C 런타임 정적으로 링크하십시오.
클라이언트 응용 프로그램이 디버그 모드에서 구축 된 정적 디버그 C 런타임을 사용하는 ( /MTd
컴파일러 옵션) 경우 mysqlclient.lib
정적 라이브러리가 동일한 옵션을 사용하여 구축 된 경우에, 거기에 링크 할 수 있습니다. 클라이언트 응용 프로그램이 동적 C 런타임을 사용 ( /MD
옵션 또는 디버그 모드에서 /MDd
옵션) 경우 그것을 libmysql.dll
동적 라이브러리에 링크해야합니다. 그것은 정적 클라이언트 라이브러리에 링크 할 수 없습니다.
링크 옵션에 대해 설명하는 MSDN 페이지는 http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx 에 있습니다.
MySQL 클라이언트 라이브러리에 링크 문제 해결
MySQL 5.6에서 MySQL 클라이언트 라이브러리에 SSL 지원이 포함되어 포함되어 있습니다. 응용 프로그램에서 링크시 OpenSSL 라이브러리에서 -lssl
또는 -lcrypto
이 필요한 경우 -lmysqlclient
전에 그들을 지정해야합니다.
링커가 MySQL 클라이언트 라이브러리를 찾을 수없는 경우 여기에서와 같이, mysql_
로 시작 심볼 정의되지 않은 참조 오류가 나타날 수 있습니다.
/tmp/ccFKsdPa.o: In function `main': /tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init' /tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect' /tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error' /tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'
이 문제는 링크 명령의 끝에 -L
을 추가하여 해결할 수 있습니다. 여기에서 dir_path
-lmysqlclientdir_path
은 클라이언트 라이브러리가 존재하는 디렉토리의 경로 이름을 나타냅니다. 올바른 디렉토리를 확인하려면이 명령을 시도합니다.
shell> mysql_config --libs
mysql_config의 출력에 연결 명령에 동일하게 지정해야 다른 라이브러리가 표시 될 수 있습니다. 컴파일 또는 링크 명령에 반대 따옴표를 사용하여 mysql_config 출력을 직접 포함 할 수 있습니다. 예 :
shell> gcc -o progname progname.o `mysql_config --libs`
링크시 floor
기호가 정의 할수 없다는 에러가 발생했을 경우, 컴파일 / 링크 줄 끝에 -lm
을 추가하여 수학 라이브러리에 링크합니다. 마찬가지로, connect()
등의 시스템에 존재하고 있어야 다른 함수의 정의되지 않은 참조 오류를받은 경우에는 문제의 함수의 매뉴얼 페이지를 확인하고 링크 명령에 추가 할 라이브러리를 판단 합니다.
시스템에 존재하지 않는 함수의 다음과 같은 정의되지 않은 참조 오류를받은 경우, 일반적으로 MySQL 클라이언트 라이브러리를 사용하는 시스템과 100 % 호환되지 않는 시스템에서 컴파일 된 것을 의미합니다.
mf_format.o(.text+0x201): undefined reference to `__lxstat'
이 경우, 최신의 MySQL 또는 MySQL Connector / C 소스 배포판을 다운로드하고 스스로 MySQL 클라이언트 라이브러리를 컴파일하십시오. 섹션 2.9 "소스에서 MySQL 설치" 및 MySQL Connector / C Developer Guide 를 참조하십시오.