Programming/기타

DBT-2를 ubuntu 13.10 64bit에서 컴파일 시

라우드니스 2013. 12. 14. 10:31

기본적인 사항은 http://samurai-mysql.blogspot.kr/2009/03/settingup-dbt-2.html 참조



1. DBT-2를 컴파일하기 위해서는 MySQL의 개발자 라이브러리가 필요하다. libmysqlclient-dev를 설치하자. 


sudo apt-get install libmysqlclient-dev


2. configure에서 --with-mysql 옵션만 주면 library나 include는 알아서 처리해줌.


3. make를 했을때, mysql 함수 관련으로 undefined reference가 뜬다면


1) 제대로 mysql 개발관련 library를 설치했는지 우선 확인해보자.


locate libmysqlclient


를 쳤을경우 설치된 libmysqlclient의 경로가 잡혀야 한다. 


2) 분명히 제대로 설치했는데도 불구하고 undefined reference가 계속된다면 clang++ 로 컴파일을 진행하자.


sudo apt-get install clang++


그리고 dbt2 폴더 및 하위 src 폴더의 Makefile에서 CC, CPP 옵션이 gcc로 되어있는데 이를 clang++로 바꿔주자.


이럴 경우 (사실 gcc로는 안해봤지만) dbt2의 소스 코드중 문법적으로 틀린 부분이 발생하기 때문에 바꿔줘야 한다.


src/_socket.c 파일 중


101번째 줄: 

data += received;

->
(int &)data += received;

119번째 줄:
data += sent;
->
(int &)data += sent;


src/transaction_test.c 파일 중


195번째 줄:

                if (process_transaction(transaction, &dbc,

                         (void *) &transaction_data) != OK) {

                        disconnect_from_db(&dbc);

                        printf("transaction failed\n");

                        return 11;

                }


->


                if (process_transaction(transaction, &dbc,

                         &transaction_data) != OK) {

                        disconnect_from_db(&dbc);

                        printf("transaction failed\n");

                        return 11;

                }


이렇게 수정해 주면 컴파일이 끝난다.


*) build_db.sh 에서 MySQL이 data 파일을 로드하지 못한다면, LOCAL 옵션을 줘야한다. 설명에는 -l 을 적어주면 알아서 되게 되있는데, 막상 -l 을 적으면 인식을 못해서 그냥 수동으로 파일 로드부분에 LOCAL을 적어줬다. LOCAL 옵션의 경우 보안 문제로 인해 금지되고 있으므로, 이를 우선적으로 활성화 시켜야 한다. 


**) build_db.sh, start_db.sh, stop_db.sh, run_workload.sh 등 쉘 스크립트에서 MySQL의 socket 파일과 pid 파일을 /tmp/mysql.sock와 run/~~어쩌구 경로로 '직접' 지정해놨다. 나의 경우 /var/run/mysqld/mysqld.sock 이 mysql의 sock 파일의 경로이기 때문에 전부 바꿔주고나서야 제대로 실행이 됐다.


반응형