2013-04-25 2 views
1

Я пытаюсь создать код на C++ под Linux. Его первая попытка (в противном случае я использую только Windows). Мой код использует библиотеку API MySQL C, но у меня есть проблема с ее созданием. Я получил этот выход, пытаясь построить MainProgramC++ makefile с MySQL

g++ -lstdc++ -c MainProgram.cpp `mysql_config -–libs` -O2 -o MainProgram.obj `mysql_config –-cflags` 

    g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) 
    Copyright (C) 2006 Free Software Foundation, Inc. 
    This is free software; see the source for copying conditions. There is NO 
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

И тогда связь не делается, потому что MainProgram.obj отсутствует

Мой Makefile это:

CC = g++ CFLAGS = -lm -lstdc++ -Wall -O2 

MYSQLCFLAGS = `mysql_config –-cflags` 
MYSQLLIBS = `mysql_config -–libs` 

BIN = my_program 


OBJ = BlockingSocket.obj FTPClient.obj FTPDataTypes.obj FTPFileStatus.obj FTPListParse.obj MyStringAnsi.obj MainProgram.obj 



.PHONY: sestav .PHONY: clean 


#----------------------------------------- 

clean: rm -f *.obj 


#----------------------------------------- 

sestav: ${BIN} 


#----------------------------------------- 

$(BIN): $(OBJ) $(OBJ) $(CC) $(CFLAGS) $^ -o [email protected] 


#----------------------------------------- 

BlockingSocket.obj: ./FtpClient/BlockingSocket.cpp $(CC) -c ./FtpClient/BlockingSocket.cpp -O2 -o BlockingSocket.obj 

#------- 

FTPClient.obj: ./FtpClient/FTPClient.cpp  
    $(CC) -c ./FtpClient/FTPClient.cpp -O2 -o FTPClient.obj 

FTPDataTypes.obj: ./FtpClient/FTPDataTypes.cpp 
    $(CC) -c ./FtpClient/FTPDataTypes.cpp -O2 -o FTPDataTypes.obj 

FTPFileStatus.obj: ./FtpClient/FTPFileStatus.cpp  
    $(CC) -c ./FtpClient/FTPFileStatus.cpp -O2 -o FTPFileStatus.obj  

FTPListParse.obj: ./FtpClient/FTPListParse.cpp 
    $(CC) -c ./FtpClient/FTPListParse.cpp -O2 -o FTPListParse.obj 

MyStringAnsi.obj: MyStringAnsi.cpp 
    $(CC) -c MyStringAnsi.cpp -O2 -o MyStringAnsi.obj 


MainProgram.obj: MainProgram.cpp 
    $(CC) -lstdc++ -c MainProgram.cpp $(MYSQLLIBS) -O2 -o MainProgram.obj $(MYSQLCFLAGS) 

Полный выход при строительстве из царапины:

g++ -c ./FtpClient/BlockingSocket.cpp -O2 -o BlockingSocket.obj 
g++ -c ./FtpClient/FTPClient.cpp -O2 -o FTPClient.obj 
g++ -c ./FtpClient/FTPDataTypes.cpp -O2 -o FTPDataTypes.obj 
g++ -c ./FtpClient/FTPFileStatus.cpp -O2 -o FTPFileStatus.obj 
./FtpClient/FTPFileStatus.cpp:136:2: warning: no newline at end of file 
g++ -c ./FtpClient/FTPListParse.cpp -O2 -o FTPListParse.obj 
g++ -c MyStringAnsi.cpp -O2 -o MyStringAnsi.obj 
In file included from MyStringAnsi.cpp:1: 
MyString.h:257:7: warning: no newline at end of file 
In file included from MyStringAnsi.cpp:3: 
./Macros.h:22:7: warning: no newline at end of file 
MyStringAnsi.cpp:1350:2: warning: no newline at end of file 
MyStringAnsi.cpp: In member function â€void MyStringAnsi::operator+=(char)’: 
MyStringAnsi.cpp:1102: warning: NULL used in arithmetic 
g++ -lstdc++ -c MainProgram.cpp `mysql_config -–libs` -O2 -o MainProgram.obj `mysql_config –-cflags`  
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

g++ -lm -lstdc++ -Wall -O2 BlockingSocket.obj FTPClient.obj FTPDataTypes.obj FTPFileStatus.obj FTPListParse.obj MyStringAnsi.obj MainProgram.obj -o my_program 
g++: MainProgram.obj: No such file or directory 
make: *** [MainProgram] Error 1 
+0

You кажется, не хватает некоторых новых строк в make-файле в вашем вопросе. Кроме того, при создании с нуля необходимо предоставить _complete_ output. –

+0

Добавлен полный выход при создании с нуля. –

+0

Во-первых, при компиляции в объектный файл вам не нужны библиотеки, и связь не выполняется. Также вы должны попробовать неудачную команду самостоятельно в оболочке, а также проверить, что фактически верят команды 'mysql_config'. –

ответ

1

Хорошо. Я решил проблему. Сначала, как Joachim предложил в комментарии, я удалил librarries от сборки объекта Во-вторых, вместо того, чтобы использовать mysql_config --libs, я положил путь вручную

Теперь Makefile редактируется в Belows:

CFLAGS = -lm -lstdc++ -Wall -O2 -L/usr/lib/mysql/ -lmysqlclient 

$(CC) -c MainProgram.cpp -O2 -o MainProgram.obj -I/usr/include/mysql/