【问题标题】::= versus = error: undefined reference to qMain(int, char**):= 与 = 错误:未定义对 qMain(int, char**) 的引用
【发布时间】:2012-10-21 16:44:09
【问题描述】:

Qt 4.6.1

在下面的.pro文件中,当我使用语句时

sources = ef.cpp

我收到以下错误:

RInside.h: No such file or directory

然后当我用 := 替换 = 时:

sources := ef.cpp

上面的错误消失了,我得到一个新的错误:

error: undefined reference to qMain(int, char**)

从这里:https://stackoverflow.com/a/448939/462608

VARIABLE = value 变量的正常设置 - 其中的值是 在使用变量时递归展开,而不是在声明时展开

VARIABLE := value 通过简单扩展设置变量 内部的值 - 其中的值在声明时展开。

我想了解这里发生了什么,以及解决方案是什么。

.cpp

#include <RInside.h>
int main(int argc, char *argv[]) 
{
    RInside R(argc, argv);

    R["txt"] = "Hello, world!\n";

    R.parseEvalQ ("cat(txt)");

    exit(0);
}

.pro

TEMPLATE    = app
TARGET      = 
DEPENDPATH  += .
INCLUDEPATH += .

R_HOME  := 'c:/R-2.15.1'

# Input
sources  = ef.cpp
programs := $(sources:.cpp=)

## include headers and libraries for R
RCPPFLAGS :=        $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config --cppflags)
RLDFLAGS  :=        $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config --ldflags)
RBLAS     :=        $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config BLAS_LIBS)
RLAPACK   :=        $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config LAPACK_LIBS)

## include headers and libraries for Rcpp interface classes
RCPPINCL  :=        $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R $(R_ARCH) --vanilla 

--slave)
RCPPLIBS  :=        $(shell echo 'Rcpp:::LdFlags()'  | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)


## include headers and libraries for RInside embedding classes
RINSIDEINCL :=      $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)
RINSIDELIBS :=      $(shell echo 'RInside:::LdFlags()'  | $(R_HOME)/bin/R $(R_ARCH) --vanilla --slave)


## compiler etc settings used in default make rules
CXX        := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CXX)
CPPFLAGS   := -Wall $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CPPFLAGS)
#CXXFLAGS  := $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R $(R_ARCH) 

CMD config CXXFLAGS)
QMAKE_CXXFLAGS := $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CXXFLAGS)
LDFLAGS    = -s
QMAKE_LIBS := $(RLDFLAGS) $(RBLAS) $(RLAPACK) $(RINSIDELIBS) $(RCPPLIBS)
CC         := $(shell $(R_HOME)/bin/R $(R_ARCH) CMD config CXX)

【问题讨论】:

  • 看起来您已经做出的更改让您进入了链接阶段。你有qMain(int, char**) 吗?它真的在编译吗?
  • @cHao 我已经发布了我拥有的唯一源代码。我没有在任何地方专门写过 qMain。如果你的意思是别的,请澄清。
  • 我所看到的提示我链接器找不到主要功能。这意味着它要么根本不存在,要么名称错误,要么不在任何正在编译的文件中。您的主要功能在哪里以及如何定义? n 如果你没有,这东西应该如何工作?
  • @cHao If you don't have one, how is this stuff supposed to work? 你可能误会我的意思了。我有main 函数,但我没有qMain 函数。当我将:= 替换为= 时,错误有所不同。见 OP。

标签: c++ windows qt makefile


【解决方案1】:

这看起来不像 Qt 项目,因此您可能应该禁用与 Qt 库的链接。将QTCONFIG 设置为空:

QT =
CONFIG =

另一方面,如果这个一个应该链接到 Qt 库的 Qt 项目,那么问题是您正在覆盖重要的变量,例如 QMAKE_LIBSQMAKE_CXXFLAGS。使用+=,而不是:=。另外,请使用LIBS,而不是QMAKE_LIBS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2014-10-18
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多