2017-03-13 1 views
0

は私がTMBチュートリアルのこのコンパイルエラーは何ですか?

#include <TMB.hpp>        // Links in the TMB libraries 

template<class Type> 
Type objective_function<Type>::operator()() 
{ 
    DATA_VECTOR(x);         // Data vector transmitted from R 
    PARAMETER(mu);         // Parameter value transmitted from R 
    PARAMETER(sigma);        //     

    Type f;           // Declare the "objective function" (neg. log. likelihood) 
    f = -sum(dnorm(x,mu,sigma,true));    // Use R-style call to normal density 

    return f; 
} 

TMB tutorial pageからC++のコードをコピーしてtutorial.cppとしてそれを救いました。私はその後、指示に従ってそれをコンパイルしようとしました:

> compile("tutorial.cpp") 
Error in compile("tutorial.cpp") : Compilation failed 
In addition: Warning messages: 
1: In readLines(file) : incomplete final line found on 'tutorial.cpp' 
2: running command 'make -f ".../R/R-33~1.2/etc/x64/Makeconf" -f "C:/PROGRA~1/R/R-33~1.2/share/make/winshlib.mk" -f "...\AppData\Local\Temp\RtmpqgV7xA\file2d987ade32f3" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD='$(SHLIB_CXXLD)' SHLIB="tutorial.dll" WIN=64 TCLBIN=64 OBJECTS="tutorial.o"' had status 127 

また、RStudioエディタウィンドウに、私はエラーの上にホバーして、ラインType objective_function<...の隣に十字を見ることができます:

Variable templates are a C++1y extension 
expected ';' at end of declaration 
expected unqualified-id 

チュートリアル関数をコンパイルするように修正するにはどうすればよいですか?

セッション情報:私は今、私の問題を解決した

R version 3.3.2 (2016-10-31) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] TMB_1.7.8 

loaded via a namespace (and not attached): 
[1] Matrix_1.2-8  tools_3.3.2  grid_3.3.2 lattice_0.20-34 
+0

AMBではなくTMBを意味しますか? 'sessionInfo()'の結果が役に立ちます。 x86_64-apple-darwin13.4.0(64-bit)で動作します。 'devtools :: dr_devtools()'も試してみてください。 –

+0

私はTMBに感謝しました。私はTMB faqで解決策を見つけたかもしれませんが、もし私がここに投稿するなら、RToolsインストールの私の欠点と関係していると思います。 (100 MBのインストールをダウンロードするのに時間がかかります) – Alex

+0

'c:/ Rtools/mingw_64/bin/g ++:not found 'というエラーが表示されます。しかし、Rtoolsは 'c:/ RBuildTools'に、'> system( 'g ++ -v')には が組み込まれています。 COLLECT_GCC = C:\ RBUILD〜1 \ 3.4 \ mingw_32 \ bin \ G__〜1.EXE'が動作します。 – Alex

答えて

2

、二つの部分に来ました。最初はWindowsにRtoolsがインストールされていませんでした。これはmentioned hereです:

Why can I not build and run models in Windows, after installing TMB from CRAN? TMB on Windows requires Rtools. The PATH environment variable should point to the Rtools 'make' and 'gcc', and no other instances of 'make' or 'gcc'.

第二の問題は、私はthese instructions次のコマンドラインから、それを使用することができることを検証するにもかかわらず、Rtoolsをインストールした後、私はまだコンパイルを見つけることができなかったということであった:

In some cases this PATH might be C:\RBuildTools... Further, we can check if g++ can be really called from R. For example, we can see the version of gcc in R as follows. 

> system('g++ -v') 
Using built-in specs. 
COLLECT_GCC=c:\Rtools\GCC-46~1.3\bin\G__~1.EXE 
COLLECT_LTO_WRAPPER=c:/rtools/gcc-46~1.3/bin/../libexec/gcc/i686-w64-mingw32/4.6.3/lto-wrapper.exe 
Target: i686-w64-mingw32 
Configured with: /data/gannet/ripley/Sources/mingw-test3/src/gcc/configure --host=i686-w64-mingw32 --build=x86_64-linux-gnu --target=i686-w64-mingw32 --with-sysroot=/data/gannet/ripley/Sources/mingw-test3/mingw32mingw32/mingw32 --prefix=/data/gannet/ripley/Sources/mingw-test3/mingw32mingw32/mingw32 --with-gmp=/data/gannet/ripley/Sources/mingw-test3/mingw32mingw32/prereq_install --with-mpfr=/data/gannet/ripley/Sources/mingw-test3/mingw32mingw32/prereq_install --with-mpc=/data/gannet/ripley/Sources/mingw-test3/mingw32mingw32/prereq_install --disable-shared --enable-static --enable-targets=all --enable-languages=c,c++,fortran --enable-libgomp --enable-sjlj-exceptions --enable-fully-dynamic-string --disable-nls --disable-werror --enable-checking=release --disable-win32-registry --disable-rpath --disable-werror CFLAGS='-O2 -mtune=core2 -fomit-frame-pointer' LDFLAGS= 
Thread model: win32 
gcc version 4.6.3 20111208 (prerelease) (GCC) 

> system('where make') 
c:\Rtools\bin\make.exe 

エラー私は受け取った:

> compile('tutorial.cpp') 
c:/Rtools/mingw_64/bin/g++ 
... 
c:/Rtools/mingw_64/bin/g++: not found 

これは、パスがどこかにハードコードされていることを示唆した。私は古い行をコメントアウトし、正しい道に置き換え"C:\Program Files\R\R-3.3.2\etc\x64\Makeconf"

# BINPREF ?= c:/Rtools/mingw_64/bin/ 
BINPREF ?= C:/RBuildTools/3.4/mingw_64/bin/ 

alternative gcc compilersを使用するための指示に続いて、私はパスがハードにある私のMakeconfファイルにコード化されたことを発見しましたこのコンパイルは再起動せずに動作します。

関連する問題