[R] dll problem with C++ function
Carsten Dormann
carsten.dormann at ufz.de
Wed Nov 3 14:47:47 CET 2010
Dear fellow R-users,
I have the problem of being unable to repeatedly use a C++-function
within R unless by dyn.unloading/dyn.loading it after each .C call.
The C++-code (too large to attach) compiles without problem using R CMD
SHLIB. It loads (using dyn.load("myfun.so")) and executes (via .C(myfun,
...) ) properly. The function returns no object, only reads files from
disk, performs calculations and later writes a file to disk.
When I now use the same line of code again to re-run the analysis (again
via .C), I get an error message claiming a malformed input file. This
seemingly malformed input file is absolutely correct.
When I now use dyn.unload("myfun.so") and then again
dyn.load("myfun.so"), I can use it as before.
I have absolutely no clue what is going on here. The C++-function
returns a 1 if run correctly and 0 otherwise. The stand-alone version
works fine. My feeling is that R cannot deallocate the memory or somehow
doesn't "grasp" that the dll should be freed after running.
My impression is there is a very simple reason, but I couldn't find it
(in the Writing R Extensions or in any of the R help lists, including
R-sig-mac).
ANY hint greatly appreciated!
Cheers,
Carsten
For what it's worth, here my system details:
R version 2.12.0 (2010-10-15)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] de_DE.UTF-8/de_DE.UTF-8/C/C/de_DE.UTF-8/de_DE.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
The C++-functions starts like this:
#include <R.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include "stdlib.h"
#include "time.h"
#include "myhelperfunctions.h"
using namespace std;
extern "C" {
... various long C++ functions without any change for inclusion into R
(apart from renaming "main" to "myfun")
}
--
Dr. Carsten F. Dormann
Department of Computational Landscape Ecology
Helmholtz Centre for Environmental Research-UFZ
(Department Landschaftsökologie)
(Helmholtz Zentrum für Umweltforschung - UFZ)
Permoserstr. 15
04318 Leipzig
Germany
Tel: ++49(0)341 2351946
Fax: ++49(0)341 2351939
Email: carsten.dormann at ufz.de
internet: http://www.ufz.de/index.php?de=4205
Registered Office/Sitz der Gesellschaft: Leipzig
Commercial Register Number/Registergericht: Amtsgericht Leipzig, Handelsregister Nr. B 4703
Chairman of the Supervisory Board/Vorsitzender des Aufsichtsrats: MinR Wilfried Kraus
Scientific Managing Director/Wissenschaftlicher Geschäftsführer: Prof. Dr. Georg Teutsch
Administrative Managing Director/Administrativer Geschäftsführer: Dr. Andreas Schmidt
More information about the R-help
mailing list