可能会多次询问类似的问题。但是我无法用任何当前的答案来解决我的问题。我希望得到一个快速的答案。
在 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 ++)我很高兴!!
答案 0 :(得分:0)
好吧,在查看了Dime源之后,我注意到它需要使用以下两个定义中的一个:DIME_DLL
和DIME_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的人有所帮助。
一切顺利,..