标题:用arm-linux-g++编译Qt程序出现问题!
作者:lijasmine
日期:2006-04-20 16:27
内容:
下面是一个简单的http实现过程!
//httpd.h
class HttpDaemon : public QServerSocket
{ Q_OBJECT
public:
HttpDaemon( QObject* parent=0 );
void newConnection( int );
……
}
//httpd.cpp
HttpDaemon::HttpDaemon( QObject* parent )
: QServerSocket( 1025,1,parent )
{
if( !ok() )
{
qWarning("Failed to bind to port 1025");
exit(1);
}
}
void HttpDaemon::newConnection(int socket)
{
QSocket *s = new QSocket( this );
connect( s, SIGNAL(readyRead()), this, SLOT(readClient()) );
connect( s, SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
s->setSocket( socket );
emit newConnect();
}
//httpinfo.h
class HttpDaemon; //前向声明上面的类
class HttpInfo : public QVBox
{ Q_OBJECT
public:
HttpInfo();
private slots: ……
private:
HttpDaemon *httpd;
};
//httpinfo.cpp
HttpInfo::HttpInfo() : QVBox()
{
httpd = new HttpDaemon( this );
……
}
//main.cpp
int main( int argc, char **argv )
{
QApplication a( argc, argv );
HttpInfo info;
a.setMainWidget( &info );
info.show();
return a.exec();
}
//Makefile内容
OBJECTS = main.o httpd.o httpinfo.o moc_httpd.o moc_httpinfo.o
QTDIR = /usr/lib/qt-3.1
INCPATH = -I$(QTDIR)/mkspecs/default -I$(QTDIR)/include
CC = arm-linux-gcc
CXX = arm-linux-g++
MOC = $(QTDIR)/bin/moc
httpd: $(OBJECTS)
$(CXX) $^ $(INCPATH) -o $@//就是这一步出现很多错误
main.o: main.cpp httpinfo.h httpd.h
$(CXX) -c $< $(INCPATH) -o $@
httpd.o: httpd.cpp httpd.h
$(CXX) -c $&l ..
#1 [skly22222 04-20 17:00]
是不是用的库的路径没有设对
#2 [lijasmine 04-20 19:06]
httpd: $(OBJECTS)
$(CXX) $^ $(INCPATH) -o $@//对这一步发现少一些链接库
如果gcc直接编译上面这一步就应该写成:
g++-o http .obj/httpd.o .obj/httpinfo.o .obj/main.o .obj/moc_httpd.o .obj/moc_httpinfo.o-L/usr/lib/qt-3.1/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
但是我如果用交叉编译环境写这一句: //关键是这一步怎么写?
arm-linux-g++-o http .obj/httpd.o .obj/httpinfo.o .obj/main.o .obj/moc_httpd.o .obj/moc_httpinfo.o-L/usr/lib/qt-3.1/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
又出现错误:
/usr/lib/qt-3.1/lib/libqt-mt.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
#3 [shiroki 04-24 11:56]
arm-linux-g++ -o http .obj/httpd.o .obj/httpinfo.o .obj/main.o .obj/moc_httpd.o .obj/moc_httpinfo.o -L$QTEDIR/lib -lqte -lm
#4 [lijasmine 04-24 21:54]
引用第3楼shiroki于2006-04-24 11:56发表的“”:
arm-linux-g++ -o http .obj/httpd.o .obj/httpinfo.o .obj/main.o .obj/moc_httpd.o .obj/moc_httpinfo.o -L$QTEDIR/lib -lqte -lm
按照上面的修改Makefile文件
make编译出现:
/arm/arm-linux/bin/ld: cannot find -lqte//没有找到libqte.so库
collect2: ld returned 1 exit status
make: *** Error 1
#find / -name libqte*
/home/zhaoxiao/QT-PACKAGE-2.3.3/qt-2.3.3/lib/libqte.so
/home/zhaoxiao/QT-PACKAGE-2.3.3/qt-2.3.3/lib/libqte.so.2
/home/zhaoxiao/QT-PACKAGE-2.3.3/qt-2.3.3/lib/libqte.so.2.3
/home/zhaoxiao/QT-PACKAGE-2.3.3/qt-2.3.3/lib/libqte.so.2.3.2
而QT-PACKAGE-2.3.3目录是下载的一个应用于嵌入式Linux的图形界面软件包。我把home/zhaoxiao/QT-PACKAGE-2.3.3/qt-2.3.3/lib/libqte*复制到$QTEDIR/lib中还是出现同样的错误!
迷惑中,期待你的回复!Thanks
#5 [shiroki 04-24 22:36]
看不出还有什么问题了, 你看看QTEDIR和你的qt-2.3.3是一个目录吗? 是不是qtedir的变量没设?