Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
st: Compiling User Stata Plugins on 64-bit Solaris
From
Brad Cable <[email protected]>
To
[email protected]
Subject
st: Compiling User Stata Plugins on 64-bit Solaris
Date
Tue, 15 Apr 2014 11:42:02 -0500
I'm attempting to write a Stata 12 plugin for 64-bit Solaris 10 in a
non-global zone. I have downloaded the 2 files "stplugin.h" and
"stplugin.c" from:
http://www.stata.com/plugins/
I created a "hello.c" file which contains the example test code under
section 5 on that page, but I can't seem to figure out how to compile it
correctly.
First, without -m64 it doesn't compile to the right ELF class. Second,
without -fPIC I get an error when linking the code, and with -fPIC it
compiles correctly but I get a "r(9998);" return code from Stata when
trying to execute it. The only thing I've found on the "r(9998);" error
is this:
http://www.stata.com/statalist/archive/2004-01/msg00650.html
Which is a bit more information, but not quite correct for my purposes
since I'm not using that compiler, processor, or operating system.
I've tried using Sun's compiler as well with the same results. Here's
some of the output of the compiler commands I've tried:
$ gcc -shared -DSYSTEM=OPUNIX -m64 stplugin.c hello.c -o hello.plugin
Text relocation remains referenced
against symbol offset in file
.text (section) 0x20 /var/tmp//ccAjvMcv.o
.text (section) 0x20 /var/tmp//ccC7rr8G.o
_stata_ 0xf /var/tmp//ccAjvMcv.o
_stata_ 0x12 /var/tmp//ccC7rr8G.o
.rodata (section) 0x1a /var/tmp//ccC7rr8G.o
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status
$ gcc -shared -DSYSTEM=OPUNIX -m64 -fPIC stplugin.c hello.c -o hello.plugin
$ stata-mp -q
. program hello, plugin
. hello
r(9998);
$ cc -shared -DSYSTEM=OPUNIX -m64 stplugin.c hello.c -o hello.plugin
$ stata-mp -q
. program hello, plugin
ld.so.1: stata-mp: fatal: relocation error: R_AMD64_32: file
./hello.plugin: sy
> mbol _stata_: value 0xfffffb7ffedf0000 does not fit
Could not load plugin: ./hello.plugin
r(9999);
$ cc -shared -DSYSTEM=OPUNIX -m64 -KPIC stplugin.c hello.c -o hello.plugin
$ stata-mp -q
. program hello, plugin
. hello
r(9998);
The processors are four 8-core Intel Xeon X7560 2.27GHz CPUs. Stata is
registered for 32 cores.
Some version info, though both compilers seem to be triggering the
"r(9998);" error so I'm not sure if this matters or not:
$ gcc --version
gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cc -V
cc: Sun C 5.11 SunOS_i386 2010/08/13
usage: cc [ options ] files. Use 'cc -flags' for details
Any help is appreciated, thanks!
-Brad
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/