On Sat, 22 Oct 2005, Andrew Beckerman wrote:

> I am trying to install the package "kinship", only available through
> source.  The package seems to do well until the very end, where a
> multiple definitions error crops up (see below).   A previous post
> and response from B. Ripley suggested the following:
>
> "You need to change coxfit6.h to have the object extern in all but
> one of the files it is included in. That is a peculiarity of MacOS X."

It's not exactly what I would call peculiar ("odd"); rather
it simply enforces that a given variable definition only
occurs once.

> Any advice on how to accomplish this?  Is it in the works with
> regards to packaging a binary?

One approach might be to create a single file named
"foo_globals.h" (given project named "foo") with the
contents something like the following:

#ifndef FOO_GLOBALS_H
#define FOO_GLOBALS_H 1

#include <sys/types.h>

#ifdef DEFINE_GLOBALS
#define EXTERNALREF
#else
#define EXTERNALREF extern
#endif

/*
 * Global Variables
 */
EXTERNALREF unsigned gNumSims;

#endif /* FOO_GLOBALS_H */


All source files in your project that access the global variables
would #include "foo_globals.h" (possibly indirectly). For an
application, I would nominally have a minimal project header
(appropriately named "foo.h") which contained the following:

#ifndef FOO_H
#define FOO_H 1

#include "foo_types.h"   /* project-specific typedefs */
#include "foo_globals.h"

#endif /* FOO_H */


In the source file containing the main() function
(normally "foo.c"), you would prepend the preprocessor value
prior to including any project-specific headers.

#include <stdio.h>
#include <stdlib.h>
#define DEFINE_GLOBALS 1
#include "foo.h"

int main(int argc, char *argv[])
{
...
}

----------------------------------------------------------
SIGSIG -- signature too long (core dumped)

_______________________________________________
R-SIG-Mac mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to