QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 881|回复: 3

请教一个问题:为什么在编译的时候会出现“段错误”

[复制链接]
发表于 2004-11-9 22:56:48 | 显示全部楼层 |阅读模式
我写了一个工程,包括两个类(SerialPort和EstablishPort)和一个接口文件,其中SerialPort是EstablishPort的基类,想编译成一个.so文件
但是在编译的时候,其他文件都编译过了,就是在编译SerialPort的时候总是提示段错误
输出如下:
make

/usr/local/qt/bin/moc serialport.h -o .moc/moc_serialport.cpp
make: *** [.moc/moc_serialport.cpp] 段错误 (core dumped)

我是使用qmake 生成Makefile文件的

serialport.h

#ifndef SERIALPORT_H
#define SERIALPORT_H

#include <stdio.h>       
#include <string.h>       
#include <unistd.h>       
#include <fcntl.h>               
#include <errno.h>       
#include <termios.h>

#include <sys/ioctl.h>
#include <qobject.h>
#include <pthread.h>
#include <semaphore.h>

#include "constdefinition.h"

//缓冲区记录信息
struct BUFRECORD
{
        bool Empty;
        bool Full;
        int  Front;
        int  Tail;
};

class SerialPort : public QObject
{
    Q_OBJECT
public:
        SerialPort(const char& comno='a', int cardtype=1);
        ~SerialPort();
        bool initPort(const tcflag_t& baud=B9600, const uint& databit=8, const uint& parity=0, const uint& stopbit=1);
        int WriteToPort(const unsigned char * lpByte, int dwBytesToWrite );
        void StartMonitoring();
        void StopMonitoring();
        virtual void ProcessReceiveData();
        virtual void EndProcessData();
       
protected:
        static void WriteChar(SerialPort * port);
        static void ReceiveChar(SerialPort * port);
        static void*        CommThread(void* ptr);

        bool bThreadAlive;
        int ReceivePos;
        pthread_t comm_thread;
        pthread_mutex_t        write_lock;
        pthread_mutex_t        read_lock;
        sem_t        shutdown_sem;
        sem_t        write_semaphore;
        sem_t        buf_full_semaphore;
        unsigned char *        szWriteBuffer[ARRAYLEN];
        int        nBytesToWrite[ARRAYLEN];
        int nWriteBufferSize;
        BUFRECORD        BufInfo;
        unsigned char*        szReceiveBuffer;
        int        fd;
};
#endif
发表于 2004-11-10 08:51:49 | 显示全部楼层
export LD_LIBRARY_PATH=/usr/local/qt/lib
回复

使用道具 举报

 楼主| 发表于 2004-11-10 21:32:19 | 显示全部楼层
我用斑竹说的方法试过了,还是同样的错误

我尝试用gcc分别编译各文件时,没有出现错误,编译过程如下
gcc -Wall -I/usr/local/qt/include -c serialport.h serialport.cpp
gcc:Compilation of header file requested

gcc -Wall -I/usr/local/qt/include -c establishserialport.h establishserialport.cpp
gcc:Compilation of header file requested
establishserialport.cpp:120:2:warning:no newline at end of file

gcc -Wall -I/usr/local/qt/include -c interface.cpp
interface.cpp:40:1:warning:no newline at end of file

gcc -shared -o libwe.so interface.o establishserialport.o serialport.o

我做了一个测试程序
如果以这种方式编译:gcc -o testComm testComm.cpp -ldl
在load的时候出错,我将出错原因显示出来
./testComm
handle=0
/lib/libwe.so: undefined symbol: __7QObjectP7QObjectPC

如果以这种方式编译:gcc -o testComm testComm.cpp -ldl -L/usr/local/qt/lib -lqt
出错原因是
./testComm
handle=0
/lib/libwe.so: undefined symbol: __vt_10SerialPort


不只是什么原因,请帮忙分析一下,多谢多谢!!!
回复

使用道具 举报

发表于 2004-11-10 21:48:31 | 显示全部楼层
尝试一下把库放在文件前面,方便连接程序找到库里的符号。

另外,你的概念有问题,编译时段错误和你的程序没有问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 03:37 , Processed in 0.037676 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表