2012-11-01 26 views
1

的Qt 4.6.1:=對比=錯誤:未定義參照QMAIN(INT,焦炭**)

在下面的pro文件,當我使用語句

sources = ef.cpp 

我得到如下錯誤:

RInside.h: No such file or directory 

enter image description here

然後當我更換=:=,如:

sources := ef.cpp 

上述錯誤消失了,我得到一個新的錯誤:

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

enter image description here

從這裏:https://stackoverflow.com/a/448939/462608

VARIABLE = value Normal setting of a variable - values within it are recursively expanded when the variable is used, not when it's declared

VARIABLE := value Setting of a variable with simple expansion of the values inside - values within it are expanded at declaration time.

我想了解這裏發生了什麼,而w帽子是解決方案。

的.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) 
+0

看起來你已經做出的改變讓你進入鏈接階段。你有'qMain(int,char **)'嗎?它是否真的被編譯? – cHao

+0

@cHao我已經發布了我擁有的唯一源代碼。我沒有專門寫qMain在任何地方。如果你的意思是別的,請澄清。 –

+0

我在看到提示,鏈接器找不到主要功能。這意味着它根本不存在,名稱錯誤,或者不在正在編譯的任何文件中。您的主要功能在哪裏以及如何定義? ñ如果你沒有一個,這個東西應該如何工作? – cHao

回答

2

這看起來並不像一個Qt項目,所以你應該禁用鏈接對Qt的庫。設置QTCONFIG是空的:

QT = 
CONFIG = 

如果在另一方面,這應該針對Qt庫鏈接的Qt項目,那麼問題是,你覆蓋重要的變量,如QMAKE_LIBSQMAKE_CXXFLAGS。使用+=,而不是:=。此外,請使用LIBS,而不是QMAKE_LIBS