Bookmark and Share

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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index