Как я могу решить libmysqlclient_r.so символ ссылки ссылки ошибки? - PullRequest
0 голосов
/ 27 марта 2012

следующее - вывод make linking. он показывает ошибки ссылок на символы, хотя я указал путь для libmysqlclient_r.so

Если я свяжу его с libmysqlclient.so, тогда он будет работать нормально. Но так как моя программа использует многопоточность, я хочу связать libmysqlclient_r.so

g++ -L/usr/local/lib -L/lib/64 -L/opt/mysql/mysql/lib -L../../dependencies/glog/lib -L../../dependencies/libevent/lib -L../../dependencies/json/jsoncpp/lib -ljson-gcc-3.4.3_libmt -levent -lglog -lz -lmysqlclient_r -lpthread -lnsl -lumem -lmysys -lmystrings -o ../../dbprocess/bin/dbprocess dbprocess.o sessionlookupcsidrequest.o sessionlookupipv4request.o ../dbframework/connectionpool.o ../dbframework/connectionproxy.o ../dbframework/dbconnection.o  ../framework/rpcmethod.o ../framework/rpcmethoddispatcher.o ../framework/rpcmethodfactory.o ../framework/jsonmethod.o ../framework/libeventmethoddispatcher.o ../framework/tobject.o ../framework/acceptor.o ../framework/configuefile.o ../framework/connmethoddata.o

Undefined                       first referenced
symbol                             in file
mysql_error                         ../dbframework/dbconnection.o
mysql_close                         ../dbframework/dbconnection.o
mysql_stmt_store_result             sessionlookupcsidrequest.o
mysql_stmt_close                    ../dbframework/dbconnection.o
mysql_stmt_fetch                    sessionlookupcsidrequest.o
mysql_stmt_error                    sessionlookupcsidrequest.o
mysql_options                       ../dbframework/dbconnection.o
mysql_stmt_free_result              sessionlookupcsidrequest.o
mysql_stmt_bind_result              sessionlookupcsidrequest.o
mysql_stmt_num_rows                 sessionlookupcsidrequest.o
mysql_stmt_prepare                  ../dbframework/dbconnection.o
mysql_ping                          ../dbframework/dbconnection.o
mysql_init                          ../dbframework/dbconnection.o
mysql_stmt_bind_param               sessionlookupcsidrequest.o
mysql_real_connect                  ../dbframework/dbconnection.o
mysql_stmt_execute                  sessionlookupcsidrequest.o
mysql_stmt_init                     ../dbframework/dbconnection.o
ld: fatal: Symbol referencing errors. No output written to ../../dbprocess/bin/dbprocess
collect2: ld returned 1 exit status
make: *** [../../dbprocess/bin/dbprocess] Error 1

следующий файл make

CPP = g++
LD = $(CPP)
OBJS = dbprocess.o sessionlookupcsidrequest.o sessionlookupipv4request.o ../dbframework/connectionpool.o ../dbframework/connectionproxy.o ../dbframework/dbconnection.o  ../framework/rpcmethod.o ../framework/rpcmethoddispatcher.o ../framework/rpcmethodfactory.o ../framework/jsonmethod.o ../framework/libeventmethoddispatcher.o ../framework/tobject.o ../framework/acceptor.o ../framework/configuefile.o ../framework/connmethoddata.o
CPPFLAGS = -g $(INCFLAGS) -c -Wall -pthreads
LDFLAGS = -L/usr/local/lib -L/lib/64 -L/opt/mysql/mysql/lib/ -L../../dependencies/mysql/lib/solaris -L../../dependencies/glog/lib -L../../dependencies/libevent/lib -L../../dependencies/json/jsoncpp/lib -ljson-gcc-3.4.3_libmt -levent -lglog -lz -lmysqlclient_r -lpthread -lnsl -lumem -lmysys -lmystrings
LIB = ../../dbprocess/bin/dbprocess
INCFLAGS = -I../includes -I/opt/mysql/mysql/include -I../../dependencies/glog/include -I../../dependencies/json/jsoncpp/include -I../../dependencies/libevent/include

all : $(LIB)

$(LIB) : $(OBJS)
$(LD) $(LDFLAGS) -o $(LIB) $(OBJS)

%.o: ../%.cpp
$(CPP) $(CPPFLAGS) $<

clean : 
rm -r -f $(LIB) $(OBJS)

Пробовал с разными флагами, но без изменений. Пожалуйста, предложите

1 Ответ

0 голосов
/ 27 марта 2012

Ваша проблема может заключаться в том, что порядок передачи объектов и библиотек в ld (или ld через g++) имеет большое значение, и вы указываете -lmysqlclient_r перед объектными файлами, которые зависят от него.Вы должны попытаться переместить все параметры -l в конец строки после *.o, то есть изменить шаг make-файла на

(возьмите два - на самом деле точку Мата из комментариев: вы поместили библиотекуссылки в переменной LDFLAGS)

$(LIB) : $(OBJS)
$(LD) -o $(OBJS) $(LIB) $(LDFLAGS)
...