QT / mingw32的未定义的引用错误... ...无法链接的.lib(Qt/mingw32 u

2019-06-26 03:09发布

我是新来的Qt,并有一个错误,我无法修复。

我有一大堆窗口(VS2005)静态库文件( .lib )。 如果他们使用Qt工作得很好,我的测试。 所以我采取了最简单的库,我有。 (被叫MessageBuffer )。

因此,我增加MessageBuffer.hmain.cpp ,并在添加这些文件的位置INCLUDEPATH中的.pro

在此之前的一切看起来很好,我可以使用类和Qt IDE显示所有方法和一切。 所以对我来说看起来像它找到.h文件。

现在我加入了MessageBuffer.lib在(VS2005 /调试版本) .pro是这样的:

LIBS += E:/SharedLibrary/lib/MessageBufferd.lib

我也曾尝试以下操作:

win32:LIBS += E:/SharedLibrary/lib/MessageBufferd.lib
LIBS += -LE:/SharedLibrary/lib -lMessageBufferd
win32:LIBS += -LE:/SharedLibrary/lib -lMessageBufferd

下面是我的内容.pro文件:

QT += opengl
TARGET = SilverEye
TEMPLATE = app
INCLUDEPATH += E:/SharedLibrary/MessageBuffer
SOURCES += main.cpp \
    silvereye.cpp
HEADERS += silvereye.h
FORMS += silvereye.ui
OTHER_FILES += 
win32:LIBS += E:/SharedLibrary/lib/MessageBufferd.lib

他们都给予我同样的错误:(和我一样,即使我不包括.lib

Running build steps for project SilverEye...
Configuration unchanged, skipping QMake step.
Starting: C:/Qt/2009.03/mingw/bin/mingw32-make.exe -w 
mingw32-make: Entering directory `C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye'
C:/Qt/2009.03/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\SilverEye.exe debug/main.o debug/silvereye.o debug/moc_silvereye.o -L"c:\Qt\2009.03\qt\lib" -lopengl32 -lglu32 -lgdi32 -luser32 -lmingw32 -lqtmaind E:/SharedLibrary/lib/MessageBufferd.lib -lQtOpenGLd4 -lQtGuid4 -lQtCored4
mingw32-make[1]: Leaving directory `C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye'
mingw32-make: Leaving directory `C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye'
debug/main.o: In function `Z5qMainiPPc':
C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye/main.cpp:12: undefined reference to `MessageBuffer::MessageBuffer()'
C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye/main.cpp:13: undefined reference to `MessageBuffer::Append(char*, int)'
C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye/main.cpp:17: undefined reference to `MessageBuffer::~MessageBuffer()'
C:/Documents and Settings/JP/My Documents/QTProjects/SilverEye/main.cpp:17: undefined reference to `MessageBuffer::~MessageBuffer()'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\SilverEye.exe] Error 1
mingw32-make: *** [debug] Error 2
Exited with code 2.
Error while building project SilverEye
When executing build step 'Make'

任何人都可以帮助吗?

Answer 1:

基于这个问题与Visual Studio中的G ++(MinGW的)编译的应用程序编译使用库和MSDN论坛后我不能混用VC和GCC它不会出现,你可以用Visual C ++编译库链接GCC应用。

解决办法是重新编译使用相同的编译器的一切。



Answer 2:

MinGW的常见问题讨论了这个问题,并提供了一个解决方案:

  1. 创建使用reimp定义文件(LIB文件)或pexports(对于dll文件)。
  2. 从STDCALL功能删除下划线前缀。
  3. 使用dlltool到MSVC库转换成MinGW的库的新定义。

没有工作。 我们终于从函数名,这导致它编译删除序号。 但是,该计划将无法运行,因为它不能在DLL中找到链接的功能。 最后,咨询MSDN文档定义文件后,我们改变了构建指令:

  1. 使用reimp创建一个定义文件。
  2. 对于每个STDCALL功能(格式化为_name @序)添加线路名= _name @序,允许的MinGW其STDCALL命名约定映射到该MSVC的。
  3. 使用dlltool到MSVC库转换成MinGW的库的新定义。

有效! 要编译项目,你必须简单:

  1. 下载并安装Qt / Windows软件包,其中包括MinGW的。
  2. 下载reimp其拖放到MinGW的/ bin文件夹。
  3. 下载开发包的第三方库和环境变量指向该位置。
  4. 生成项目与平时QMAKE / make命令。

:来自http://blog.outofhanwell.com/2006/05/01/linking-msvc-libraries-with-mingw-projects/



Answer 3:

我假设你已经使用了MessageBuffer库有问题的其他应用程序。 错误看起来要么无法找到库或MessageBuffer类不被导出。

你有没有试过把-l在图书馆前在亲文件?

win32:LIBS += -lE:/SharedLibrary/lib/MessageBufferd.lib

看我其他的答案 。 我加了对方的回答,因为我不想让这个回答任何凌乱的比它已经是。

到目前为止已经试过:

  • 不是一个错字,d被附加到库
  • 使用LIB扩展名是正确的,因为在输出看到


文章来源: Qt/mingw32 undefined reference errors… unable to link a .lib