相关疑难解决方法(0)

429
推荐指数
8
解决办法
17万
查看次数

链接c代码到c ++代码时g ++链接顺序依赖关系

在今天之前,我始终认为在链接阶段将对象和库传递给g ++的顺序并不重要.然后,今天,我尝试从c ++代码链接到c代码.我将所有C头文件包装在一个extern"C"块中,但链接器仍然很难找到我知道在C对象归档中的符号.

困惑,我创建了一个相对简单的例子来隔离链接错误,但令我惊讶的是,更简单的示例链接没有任何问题.

经过一些试验和错误后,我发现通过模拟简单示例中使用的链接模式,我可以得到主要代码链接OK.模式首先是对象代码,对象归档第二,例如:

g++ -o serverCpp serverCpp.o algoC.o libcrypto.a

任何人都可以解释为什么会这样吗?我在链接普通的c ++代码时从未见过这个问题.

c c++ linker g++

33
推荐指数
4
解决办法
2万
查看次数

c ++对vtable的未定义引用

我正在学习C++.我正在尝试做一个练习,我用一个函数定义了几个纯虚拟类的实现.我在连接使用这些实现的类时遇到问题.

==> BasicMath.h <==
#ifndef BASIC_MATH_H
#define BASIC_MATH_H

#include<string>
#include<vector>    

class BasicMath { };


#endif // BASIC_MATH_H

==> Operation.h <==

#ifndef OPERATION
#define OPERATION

#include<string>
#include<vector>    

class Operation {
 public:
  virtual void perform(std::vector<std::string> vec) = 0;
};


#endif // OPERATION

==> Sum.h <==
#ifndef SUM_H
#define SUM_H

#include "Operation.h"

class Sum: public Operation {
 public:
  void perform(std::vector<std::string> vec);
};

#endif // SUM_H

==> BasicMath.cpp <==
#ifndef BASIC_MATH_C
#define BASIC_MATH_C

#include <string>
#include <vector>
#include <iostream>
#include "BasicMath.h"
#include "Sum.h"

int …
Run Code Online (Sandbox Code Playgroud)

c++ g++

16
推荐指数
4
解决办法
4万
查看次数

使用CONFIG + = staticlib构建Qt应用程序会导致"未定义引用vtable"错误

编辑:我已经大量编辑了这篇文章,将项目剥离到其基本要素.我还添加了一个Github存储库,包括本文中未引用的文件.


我有一个使用subdirs模板的Qt Creator项目(qmake,Qt 5.2.0,Creator 3.0.0).有三个子项目:

  1. 体育场 - 配置为TEMPLATE = lib和的图书馆CONFIG += staticlib.
  2. 足球-被配置为图书馆TEMPLATE = libCONFIG += staticlib并使用Field图书馆.
  3. 服务器 - 使用体育场和足球库的QML应用程序.

我正在Windows 8.1(MSVC2012)和Linux(gcc 4.8.1)上构建此应用程序.它在Windows上没有问题,但Linux构建表现奇怪.

我得到的错误看起来像这样:

undefined reference to 'vtable for Stadium::Engine'
Run Code Online (Sandbox Code Playgroud)

我已经将这个项目重写为一组显示错误的裸文件.你可以在Github上找到它:足球.随意克隆它,并为自己看到所有的错误.该661441c承诺解决问题,并09836f9提交包含错误.

Stadium Engine.h文件是一个抽象类.它看起来像这样:

#ifndef STADIUM_ENGINE_H
#define STADIUM_ENGINE_H

#include <QObject>

namespace Stadium {

class Engine : public QObject
{
    Q_OBJECT

public slots:
    virtual void executeCommand() = 0;

};

} …
Run Code Online (Sandbox Code Playgroud)

c++ linux qt gcc qt-creator

15
推荐指数
1
解决办法
4339
查看次数

qt错误:未定义引用`vtable for Thread'

我有代码:

#include <iostream>
#include <QThread>
#include <unistd.h>
#include <stdlib.h>
#include <QApplication>


using std::cerr;
using std::endl;

class Thread : public QThread
{
    Q_OBJECT
public:
    Thread();
    ~Thread();
    void setMessage(const QString &_message);
    void stop();
protected:
    void run();
private:
    QString message;
    volatile bool stopped;
};

Thread::Thread()
{
    stopped = false;    
    run();
}

Thread::~Thread()
{

}


void Thread::run()
{
    while(!stopped){
        cerr << qPrintable(message);
        sleep(1);
    }
        stopped = false;
        cerr << endl;
}

void Thread::stop()
{
    stopped = true; 
}

void Thread::setMessage(const QString &_message)
{
    message …
Run Code Online (Sandbox Code Playgroud)

c++ qt multithreading

3
推荐指数
2
解决办法
8265
查看次数

链接器错误:未定义引用`vtable for square`.代码包括虚函数

我在这里检查了最常见的未定义的vtable问题引用,虽然这让我更好地理解了发生了什么,但我仍然无法收集足够的信息来弄清楚为什么我有这个错误.

我有一个简单的Square类,最初我试图从Polygon类继承.由于我对C++已经相对了解并且还在学习,所以我还没有尝试过多态性.

无论如何,在我试图摆脱基类(Polygon)后,我认为这可能会有所帮助.不幸的是,我仍然遇到同样的错误,我不知道发生了什么.我所知道的是,最初,Polygon该类需要一个至少包含构造函数定义的源文件,我给了它.这摆脱vtablePolygon班级的错误.

我的主要问题是我仍然在为Square类继承这个,它应该从Polygon类继承.我想知道的是我如何正确实现这一点以避免在vtable获得多态性的同时获得错误?

Polygon.h /的.cpp

#ifndef POLYGON_H
#define POLYGON_H

#include "Shape.h"
#include "vector3f.h"

class Polygon
{
public:
    Polygon();
    virtual void Collide(Shape &s) = 0;
    virtual void Collide(Polygon &p) = 0;
    virtual bool Intersects(const Shape &s) = 0;
    virtual bool Intersects(const Polygon &s) = 0;
protected:
    virtual void Draw() const = 0;
};

#endif // POLYGON_H

//------------------

#include "Polygon.h" …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors vtable undefined-reference

3
推荐指数
1
解决办法
6016
查看次数