2011-12-24 5 views
1

샘플 C 코드에서 mysqlclient을 사용하여 MySQL 서버에 연결합니다. Makefile입니다.부분 연결하는 방법?

example: example.c 
    $(CC) $< -o [email protected] `mysql_config --cflags --libs` 

잘 작동합니다. 그러나 예 : 다이나믹이며, 이는 내가 원하는 것이 아닙니다. 내가 뭘 원하는 것은 다른 라이브러리에 동적 동맹, libz 등 , libcrypto 을 연결하는 동안, libmysqlclient 정적 동맹에 연결하는 것입니다.

참고하시기 바랍니다.

$ mysql_config --cflags --libs 
-I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \ 
-fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE \ 
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv 

-rdynamic -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm \ 
-L/usr/lib64 -lssl -lcrypto 
+0

[링크 할 때 정적 및 공유 객체 라이브러리를 혼합 할 수 있습니까?] (http://stackoverflow.com/questions/2954387/can-i-mix-static-and-shared-object-libraries-when 링크) –

답변

0

다행히 내가이 죽은 후를 보내 겠 몇 가지 번개가 있습니다 --cflags --libs 함께 되는 mysql_config의 출력. 어쩌면 살아남을 수 있을지 ...

MySQL 설치에는 두 개의 라이브러리 (하나는 공유, 하나는 정적)가 제공됩니다. 공유 라이브러리가 아닌 정적 라이브러리에 명시 적으로 링크 만하면됩니다. 유감스럽게도 mysql_config는 아마도 여기서는 도움이되지 않으므로 직접 찾으셔야합니다.하지만 아마도 /usr/lib/libmysqlclient.a에있을 것입니다. 그래서 이렇게 :

$(CC) $< -o [email protected] /usr/lib/libmysqlclient.a `mysql_config --cflags` \ 
    -lz -lcrypt ...etc... 

(. ...etc... 출력의 모든 나머지 어디 그 mysql_config --libs를 방출)

.a 확장이 정적 라이브러리입니다 나타냅니다; -lmysqlclient이 아닌 전체 경로 이름을 사용하여 컴파일러가 일반적으로 선호하는 동적 버전이 아닌 정적 버전을 사용하도록합니다.