C ++对Dime库的未定义引用,无法在QT中编译

时间:2014-05-08 08:50:25

标签: c++ qt reference compilation qmake

可能会多次询问类似的问题。但是我无法用任何当前的答案来解决我的问题。我希望得到一个快速的答案。

QT C ++ 中,我尝试使用 Dime库,它来自: https://bitbucket.org/Coin3D/dime/overview

我有一个已编译的 .lib 文件的Dime库for windows。它在Visual Studio下与我朋友的机器一起工作。 所以我有所有标题和 dime.lib 文件。

在我的.pro文件中,我这样做:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = dimeTest
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp
HEADERS  += mainwindow.h
FORMS    += mainwindow.ui

LIBS += -L$$PWD/src/release/ -ldime
INCLUDEPATH += $$PWD/src
DEPENDPATH += $$PWD/src
PRE_TARGETDEPS += $$PWD/src/release/dime.lib
INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

$$ PWD / include 文件夹包含所有.h标头文件。 $$ PWD / src / release 包含该lib文件。

在我的main.cpp中,我只是尝试将变量定义为DimeLine,但无法使其工作。 这来自一个新的qt项目。

#include "mainwindow.h"
#include <QApplication>

#define DIME_NOT_DLL
#include <dime/entities/Line.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    dimeLine line; //please help!! :)

    return a.exec();
}

错误输出:

undefined reference to `dimeLine::dimeLine()'
undefined reference to `vtable for dimeExtrusionEntity'
undefined reference to `dimeEntity::~dimeEntity()'
undefined reference to `vtable for dimeExtrusionEntity'
undefined reference to `dimeEntity::~dimeEntity()'
:-1: error: release/main.o: bad reloc address 0x13 in section `.eh_frame'
collect2.exe:-1: error: error: ld returned 1 exit status

请帮我编译一下,如何在QT项目中使用Dime Library?我尝试了很多方法来编写正确的 .pro文件。他们没有工作。始终有与未定义引用相同的错误消息&#39;我使用的&#39;。我总是做干净的&amp;的qmake。

上面的.pro文件创建时使用自动方式点击“添加库”#39;项目选项。

我希望,有经验的人可以轻松编译这个。

一切顺利!

UPDATE * 1 我试图在我的机器上重新编译Dime,可能是问题是尝试使用vs lib for qt,如果有人也可以帮助我在Windows机器上为QT Creator编译Dime:https://bitbucket.org/Coin3D/dime/overview (使用mingw g ++)我很高兴!!

2 个答案:

答案 0 :(得分:0)

好吧,在查看了Dime源之后,我注意到它需要使用以下两个定义中的一个:DIME_DLLDIME_NOT_DLL。我假设您要静态链接到dime库,因此,根据注释,您必须使用DIME_NOT_DLL define。您可以通过在.pro文件中添加以下行来完成此操作:

DEFINES += DIME_NOT_DLL

答案 1 :(得分:0)

我通过使用msys在我的Windows机器上编译 DIME库解决了这个问题。在这里,我想分享我的步骤,哪些错误:我希望它可以帮助别人。

- 首先,我有一个来自朋友的 .lib 文件,他正在使用 Visual Studio 但是我发现根本没有使用minwg g ++。

- 如果使用 Visual C ++ 编译库,则会得到 .lib 文件。 但是当我在 msys 控制台上用 g ++ mingw 编译它时,我得到了一个 .a 文件与 QT创建者

一起使用

- 在ubuntu下还有一个已经编译过的libdime库版本,该文件是libdime.so,但是不要试图让它在windows上运行:))

编译角色库,

1-)从 https://bitbucket.org/Coin3D/dime

下载所有源项目

2-)安装Mingw + msys,并确保你将“ C:\ MinGW \ bin ”添加到你的路径,因为msys将需要它,无论如何使用 msys console < / strong>即可。 CD到你的角钱夹。

3-)首先需要配置

./configure --prefix=c:/yourDestinationForCompiledDIME

4-)你可以检查make是否可以正常工作。在运行那些make,配置etc命令的dime文件夹上没有任何空间,否则可能会失败。

make check

5-)制作

make

6-)现在安装它,。

make install

这些是编译Dime的步骤,现在将其添加到QT项目

现在,从c:/ yourDestinationForCompiledDIME复制/ lib /和/ 包含 /文件夹到您的项目文件夹。 Lib文件夹应该有.a库,include包含头文件。那些你需要为QT添加一个库。

<。>文件中的

win32: LIBS += -L$$PWD/lib/ -ldime

INCLUDEPATH += $$PWD/lib
DEPENDPATH += $$PWD/lib

win32-g++: PRE_TARGETDEPS += $$PWD/lib/libdime.a

INCLUDEPATH += $$PWD/include

在您的cpp代码中,重点是。

#define DIME_NOT_DLL 
当然,

和你的标题,无论你需要什么......

#include <dime/entities/Line.h>

所有cpp代码如下:

#include "mainwindow.h"
#include <QApplication>

#define DIME_NOT_DLL
#include <dime/entities/Line.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    dimeLine line; //please help!! :)

    return a.exec();
}

我希望对需要在QT项目中起诉Dime的人有所帮助。

一切顺利,..