C++ 未定义对一角钱库的引用,无法在QT中编译
C++ Undefined Reference to Dime Library, Can't compile in QT
类似的问题可能会被问很多次。然而,我无法用目前的任何答案来解决我的问题。我希望能尽快得到答复。
在QT C++中,我尝试使用Dime库,它来自:https://bitbucket.org/Coin3D/dime/overview
我有一个编译过的windows Dime库的.lib文件。它在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库?我尝试了许多方法来编写正确的.pro文件。没有一个奏效。总是有和未定义的引用"我使用的内容"相同的错误消息。我总是干干净净;qmake。
上面的当前.pro文件是通过点击项目上的"添加库"选项自动创建的。
我希望,一个有经验的人可以很容易地编译这个。
一切顺利!
更新*1我正试图在我的机器上重新编译Dime,问题可能是试图将vs lib用于qt,如果有人能帮助我编译Dime的话:https://bitbucket.org/Coin3D/dime/overview在QT Creator的windows机器上(使用mingw g++(我会非常高兴!!
在查看Dime源代码后,我注意到它需要使用以下两个定义之一:DIME_DLL
和DIME_NOT_DLL
。我假设,您将静态地链接到dime库,所以,根据注释,您必须使用DIME_NOT_DLL
定义。您可以在.pro文件中添加以下行:
DEFINES += DIME_NOT_DLL
我用msys在windows机器上编译DIME库解决了这个问题。在这里,我想分享一下我采取了哪些步骤,犯了哪些错误:我希望它能帮助其他人。
-首先,我从一个朋友那里得到了一个.lib文件,他正在使用Visual Studio,但我发现这根本不适合minwg g++。
-因此,如果使用Visual C++编译库,则会得到一个.lib文件。然而,当我在msys控制台上用g++和mingw编译它时,我得到了一个.a文件,该文件与QT创建者配合良好
-同样在ubuntu下,有一个已经编译过的库libdime版本,文件是libdime.so,但不要试图让它在windows上运行:(
用于编译Dime库,
1-(从下载所有源项目https://bitbucket.org/Coin3D/dime
2-(安装Mingw+msys,并确保您将">C:\Mingw\bin"添加到您的路径中,因为msys无论如何都需要它,然后使用msys控制台。CD到你的一角硬币文件夹。
3-(首先需要配置它,
./configure --prefix=c:/yourDestinationForCompiledDIME
4-(您可以检查make是否可以正常工作。在运行make、configure etc命令的dime文件夹上不要有任何空间,否则可能会失败。
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();
}
我希望这将有助于谁需要起诉Dime在QT项目。
祝你一切顺利,。。
- 编译C++时未定义的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 在编译它时显示未定义的引用
- 如何编译使用循环引用的代码?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 结构引用编译错误:预期的标识符或"&"标记之前的"("
- 返回非常量引用编译的 Const 方法
- 大量奇怪的未定义引用编译带有挡泥板的提升程序
- C++通过引用编译错误传递
- 将临时变量绑定到非const引用编译
- 未定义的引用编译
- 未定义的引用…编译ros节点时