Hi Martin,
Sorry I was stupid. Indeed, I named the file tom.c instead of tmp.cc.
Now with the right extension, it works with the 'extern "C"' piece of code.
However, for your (ii) point, this shouldn't be related to the omission
of 'extern "C"' but to the fact that the shared library is not loaded in R.
I used "dyn.load("tmp.so")" (or "tmp.dll" under Windows) before running
your example. With this, you should not have the message "Error in
.Call("XXX") : C symbol name "XXX" not in load table ".
It seems weired that you didn't get the message with the "extern "C"".
Is the loaded shared library the latest version of your code - i.e. I
mean that did you recompile and reload the latest version of your c++ code?
I hope this will help,
Cheers,
Mathieu
Martin Schlather a écrit :
Hi Mathieu,
Very strange.
(i) The whole package RandomFields is written with ` extern "C" '
and seems working. There is no message from valgrind
anywhere, except in two situations that I have boiled
down to the code in the bug report.
(ii) without ` extern "C" ' I get a warning plus an
error:
.Call("XXX")
==18032== Conditional jump or move depends on uninitialised value(s)
==18032== at 0x401620C: (within /lib/ld-2.8.so)
==18032== by 0x42825C3: (within /lib/libc-2.8.so)
==18032== by 0x4282989: _dl_sym (in /lib/libc-2.8.so)
==18032== by 0x417ADE7: (within /lib/libdl-2.8.so)
==18032== by 0x400DE25: (within /lib/ld-2.8.so)
==18032== by 0x417B0DB: (within /lib/libdl-2.8.so)
==18032== by 0x417AD72: dlsym (in /lib/libdl-2.8.so)
==18032== by 0x811012D: R_dlsym (Rdynload.c:787)
==18032== by 0x8110A98: R_FindSymbol (Rdynload.c:836)
==18032== by 0x816E41C: resolveNativeRoutine (dotcode.c:240)
==18032== by 0x817473A: do_dotcall (dotcode.c:825)
==18032== by 0x8194C12: Rf_eval (eval.c:487)
==18032== by 0x805B163: Rf_ReplIteration (main.c:257)
==18032== by 0x805B3E7: R_ReplConsole (main.c:306)
==18032== by 0x805B6D7: run_Rmainloop (main.c:966)
==18032== by 0x8058F80: main (Rmain.c:33)
Error in .Call("XXX") : C symbol name "XXX" not in load table
Have you named the file u.c or u.cc?
Cheers,
Martin
Mathieu Ribatet wrote:
Hi Martin,
I wasn't able to compile your files. Replacing "extern "C" SEXP XXX();"
by "SEXP XXX();" solve the issue and I got no message from valgrind -
I'm not sure this is what you really want to do though.
I hope this might help.
Cheers,
Mathieu
schlat...@math.uni-goettingen.de a écrit :
Hi,
I get an "Conditional jump or move depends on uninitialised value(s)"
from valgrind when using 'solve' in combination with some simple
C-code. (I did not use other functions of R besides 'solve'.)
In detail: running
R --vanilla -d "valgrind --tool=memcheck --memcheck:leak-check=yes
--num-callers=20 "
and calling
.Call("XXX")
nd <- 3
solve(diag(nd) , as.vector(1:nd))
.Call("XXX")
gives the above valgrind message for the second call of "XXX".
Without "solve" in the middle, there is no message
from valgrind.
Best regards,
Martin
/////////////////////////////// C source file u.cc
#include "u.h"
SEXP XXX() {
SEXP ans;
PROTECT (ans = allocVector(INTSXP, 1));
INTEGER(ans)[0] = 1;
UNPROTECT(1);
return ans;
}
/////////////////////////////// header file u.h
#ifndef RFsimu_public_H
#define RFsimu_public_H 1
#include <R.h>
#include <Rinternals.h>
#include <Rmath.h>
#include <Rdefines.h>
extern "C" SEXP XXX();
#endif /* RF_simu_PUBLIC_H*/
--please do not edit the information below--
Version:
platform = i686-pc-linux-gnu
arch = i686
os = linux-gnu
system = i686, linux-gnu
status = Under development (unstable)
major = 2
minor = 9.0
year = 2009
month = 01
day = 13
svn rev = 47573
language = R
version.string = R version 2.9.0 Under development (unstable)
(2009-01-13 r47573)
Locale:
LC_CTYPE=en_GB.UTF-8;LC_NUMERIC=C;LC_TIME=en_GB.UTF-8;LC_COLLATE=en_GB.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_GB.UTF-8;LC_PAPER=en_GB.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_GB.UTF-8;LC_IDENTIFICATION=C
Search Path:
.GlobalEnv, package:stats, package:graphics, package:grDevices,
package:utils, package:datasets, package:methods, Autoloads, package:base
--
Institute of Mathematics
Ecole Polytechnique Fédérale de Lausanne
STAT-IMA-FSB-EPFL, Station 8
CH-1015 Lausanne Switzerland
http://stat.epfl.ch/
Tel: + 41 (0)21 693 7907
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel