首页 文章

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

提问于
浏览
0

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

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

我有一个已编译的 .lib 文件的Dime库用于Windows . 它是Visual Studio下的's working with my friend'机器 . 所以我有所有 Headers 和 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 file . 他们没有工作 . 始终与'what i use'的未定义引用具有相同的错误消息 . 我总是做干净和qmake .

上面的当前.pro文件是使用自动方式创建的,单击项目上的“添加库”选项 .

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

一切都好!

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

2 回答

  • 0

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

    DEFINES += DIME_NOT_DLL
    
  • 0

    我用msys在我的windows机器上编译 DIME library 解决了这个问题 . 在这里,我想分享一下我的步骤,哪些错误:我希望它可以帮助别人 .

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

    • 因此,如果使用 Visual C++ 编译库,则会得到 .lib 文件 . 但是当我在 msys 控制台上用 g++mingw 编译它时,我得到了一个 .a 文件,该文件与 QT creator 配合得很好

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

    对于编译角色库,

    1-)从 https://bitbucket.org/Coin3D/dime 下载所有源项目

    2-)安装Mingw msys,并确保你将“ C:\MinGW\bin ”添加到你的路径,因为msys将需要它,无论如何然后使用 msys console . CD到你的角钱夹 .

    3-)首先需要 configure 它,

    ./configure --prefix=c:/yourDestinationForCompiledDIME
    

    4-)你可以检查make是否可以正常工作 . 在运行那些make,配置etc命令的dime文件夹上执行 not have any space ,否则可能会失败 .

    make check
    

    5-)成功

    make
    

    6-)现在安装它, .

    make install
    

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

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

    在.pro文件中:

    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的人有所帮助 .

    一切都好,..

相关问题