【问题标题】:warning: cannot find entry symbol nable-stdcall-fixup; defaulting警告:找不到入口符号 nable-stdcall-fixup;违约
【发布时间】:2012-10-25 00:11:53
【问题描述】:

mingw 包含gcc 4.6.3,名称为 - i686-w64-mingw32。

Windows 上, 一个 Qt 的.pro 文件 w.r.t 一个 hello world 程序:

QT          += core gui
TEMPLATE    = app
TARGET      = ef

SOURCES     = ef.cpp
DEPENDPATH  += .

INCLUDEPATH += . 
INCLUDEPATH += c:/R-2.15.1/include
INCLUDEPATH += c:/R-2.15.1/library/Rcpp/include
INCLUDEPATH += c:/R-2.15.1/library/RInside/include

LIBS        += -L c:/R-2.15.1/bin/i386 -lR
LIBS        += -L c:/R-2.15.1/library/Rcpp/libs/i386 -lRcpp
LIBS        += -L c:/R-2.15.1/library/RInside/libs/i386 -lRInside 

程序编译如下:

注意最后有一个警告。

系统路径如下:

Qt 的路径:

请指出我遗漏的地方。

更新:


现在我将qmake.conf更新如下:

#
# qmake configuration for win32-g++
#
# Written for MinGW
#

MAKEFILE_GENERATOR  = MINGW
TEMPLATE        = app
CONFIG          += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header
QT          += core gui
DEFINES         += UNICODE QT_LARGEFILE_SUPPORT
QMAKE_COMPILER_DEFINES  += __GNUC__ WIN32

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o

QMAKE_CC        = gcc
QMAKE_LEX       = flex
QMAKE_LEXFLAGS      =
QMAKE_YACC      = byacc
QMAKE_YACCFLAGS     = -d
QMAKE_CFLAGS        =
QMAKE_CFLAGS_DEPS   = -M
QMAKE_CFLAGS_WARN_ON    = -Wall
QMAKE_CFLAGS_WARN_OFF   = -w
QMAKE_CFLAGS_RELEASE    = -O2
QMAKE_CFLAGS_DEBUG  = -g
QMAKE_CFLAGS_YACC   = -Wno-unused -Wno-parentheses

QMAKE_CXX       = g++
QMAKE_CXXFLAGS      = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG    = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD   = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON  = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions

QMAKE_INCDIR        =
QMAKE_INCDIR_QT     = $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT     = $$[QT_INSTALL_LIBS]

QMAKE_RUN_CC        = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP    = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX       = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP   = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

QMAKE_LINK      = g++
QMAKE_LINK_C        = gcc
QMAKE_LFLAGS        = -Wl, -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE    = -Wl,-s
QMAKE_LFLAGS_DEBUG  =
QMAKE_LFLAGS_CONSOLE    = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS    = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL        = -shared
QMAKE_LINK_OBJECT_MAX   = 10
QMAKE_LINK_OBJECT_SCRIPT= object_script


QMAKE_LIBS      =
QMAKE_LIBS_CORE         = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
QMAKE_LIBS_GUI          = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK      = -lws2_32
QMAKE_LIBS_OPENGL       = -lopengl32 -lglu32 -lgdi32 -luser32
QMAKE_LIBS_COMPAT       = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY     = -lmingw32 -lqtmain

!isEmpty(QMAKE_SH) {
    MINGW_IN_SHELL      = 1
    QMAKE_DIR_SEP       = /
    QMAKE_COPY      = cp
    QMAKE_COPY_DIR      = xcopy /s /q /y /i
    QMAKE_MOVE      = mv
    QMAKE_DEL_FILE      = rm
    QMAKE_MKDIR     = mkdir
    QMAKE_DEL_DIR       = rmdir
    QMAKE_CHK_DIR_EXISTS = test -d
} else {
    QMAKE_COPY      = copy /y
    QMAKE_COPY_DIR      = xcopy /s /q /y /i
    QMAKE_MOVE      = move
    QMAKE_DEL_FILE      = del
    QMAKE_MKDIR     = mkdir
    QMAKE_DEL_DIR       = rmdir
    QMAKE_CHK_DIR_EXISTS    = if not exist
}

QMAKE_MOC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc.exe
QMAKE_UIC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exe
QMAKE_IDC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe

QMAKE_IDL       = midl
QMAKE_LIB       = ar -ru
QMAKE_RC        = windres
QMAKE_ZIP       = zip -r -9

QMAKE_STRIP     = strip
QMAKE_STRIPFLAGS_LIB    += --strip-unneeded
load(qt_config)

错误现在已更改为:

更新

我刚刚删除了Wl, and -enable-std..之间的空格,上面的错误就消失了:

【问题讨论】:

  • nable-stdcall-fixup 来自传递给g++ 的参数-enable-stdcall-fixup。 g++ 的 mingw32 版本将其解析为 -e&lt;...&gt;,而在 linux 上则按预期进行解析。我知道一个技巧可以将这些参数传递给mingw32-g++,但我不知道如何告诉qmake 这样做。也许这是一个开始。
  • 这是我找到的修复:qt.gitorious.org/qt/qt/merge_requests/1154 -- 诀窍是将-Wl, 添加到参数-enable-stdcall-fixup 之前,使其变为-Wl,-enable-stdcall-fixup。 qmake 中的一个错误只是“忘记”了这样做。给定的错误修复(.conf 文件)应该可以解决这个问题。您必须下载此文件并将其放入 Qt 安装的 qmake mkspecs 文件夹中。 (具体路径我不知道)
  • 如果您找到一个名为“mkspecs”的文件夹,您只需将文件放在“mkspecs/unsupported/win32-g++-cross/”下即可。
  • 好的。上述命令的详细输出可能会导致标准错误,因此您可能必须使用qmake -d 2&gt; output.txt 而不是qmake -d &gt; output.txt
  • 请注意,该错误不在 qmake 中 - 对于 QMAKE_LFLAGSQMAKE_LFLAGS_EXCEPTIONS_ON 宏定义,mkspecs/win32-g++/qmake.conf 文件不正确。 -Wl, 错误地位于 QMAKE_LFLAGS_EXCEPTIONS_ON 中 - 它需要从该宏中删除并添加到 QMAKE_LFLAGS 宏中,就在 -enable-stdcall-fixup 前面。有关详细信息,请参阅stackoverflow.com/a/12383833/12711

标签: windows qt linker mingw linker-errors


【解决方案1】:

正如this merge request 中所见,qmake.conf 文件中存在一个错误,该错误配置了您使用 qmake 的默认配置时使用的变量。

-enable-stdcall-fixup 选项需要以-Wl, 为前缀,以便mingw32-g++ 正确解析,因为-e... 在解析时将被拆分为-e ...。此前缀仅表示“不要将以下内容解析为-e nable-stdcall-fixup,而是解析为-enable-stdcall-fixup”。

qmake.conf 文件包含 -Wl 但在错误的行中,因此合并请求显示

前面的“-Wl”显然是不小心分错了 行。

补丁将-Wl 移动了一行。您可以在qmake.conf 文件上手动执行此操作,该文件应位于mkspecs/win32-g++/qmake.conf 下的Qt 安装下。更改以下行:

QMAKE_LFLAGS    = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl

进入这个:

QMAKE_LFLAGS    = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads

请注意,-Wl,-enable-stdcall-fixup 之间不应有空格。它应该作为单个参数传递给g++,以实现我们想要的。

【讨论】:

  • 你已经很好地总结了迈克尔、你和我在 cmets 中所说的内容!
  • 我遇到了同样的问题,但不得不编辑mkspecs/default/qmake.conf
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2022-11-11
  • 2016-04-17
  • 2018-12-23
  • 1970-01-01
相关资源
最近更新 更多