From: Hans Aberg <haberg-1@telia.com>
To: Mike Solomon <mikesol@ufl.edu>
Cc: guile-user@gnu.org
Subject: Re: Guile, C++, and Mac OS X 10.4 (powerpc)
Date: Wed, 28 Jul 2010 23:19:46 +0200 [thread overview]
Message-ID: <501CC8FC-0348-4E6D-87D7-67AD82CD45B1@telia.com> (raw)
In-Reply-To: <C8765677.1E9C3%mikesol@ufl.edu>
On 28 Jul 2010, at 21:49, Mike Solomon wrote:
> Hey guile users,
> Trying to compile the simple example bessel.c from
> Writing-Guile-Extensions.html (renamed bessel.cc because I'm using g+
> +), I
> encountered the following error:
>
> bessel.cc: In function 'void init_bessel()':
> bessel.cc:13: error: invalid conversion from 'scm_unused_struct*
> (*)(scm_unused_struct*)' to 'scm_unused_struct* (*)(...)'
> bessel.cc:13: error: initializing argument 5 of 'scm_unused_struct*
> scm_c_define_gsubr(const char*, int, int, int, scm_unused_struct* (*)
> (...))'
The SCM type is a pointer to an undefined C type - C hack, which
clashes with C++. Clever in C, but bad for C++ users.
> This even comes up when I put everything in extern "C" { ... }. I
> have seen
> other postings on the net for other software (lilypond, swig) that
> speaks of
> the same issue, and some suggest that it is a problem with g++ and not
> guile. I'm using powerpc-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple
> Computer, Inc. build 5370)
When you use g++, all stuff is compiled as C++. So use gcc and add c++
libraries when linking.
Then in formally correct C++, main() must be C++. Gcc accepts calling C
++ from C, but attempting to pass an exception through a C function is
converted to a termination exception.
So I wrote a C++ function scm::init_guile() calling scm_init_guile()
and other stuff that needs to be initialized. Then
int main(int argc, char** argv) {
init_guile();
try {
...
}
...
}
Then write a header bessel.h
#ifndef BESSEL_H
#define BESSEL_H
/* Copyright ...
Free Software Foundation GNU General Public License <http://www.gnu.org/licenses/
>
*/
#ifdef __cplusplus
extern "C" {
#endif
void init_bessel();
...
#ifdef __cplusplus
} // extern "C"
#endif
#endif BESSEL_H
The file bessel.c is compiled as C, but your C++ files include bessel.h.
Hans
next prev parent reply other threads:[~2010-07-28 21:19 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-28 19:49 Guile, C++, and Mac OS X 10.4 (powerpc) Mike Solomon
2010-07-28 21:19 ` Hans Aberg [this message]
2010-07-29 8:04 ` Mike Solomon
2010-07-29 12:43 ` Linas Vepstas
2010-08-18 13:49 ` Ludovic Courtès
2010-08-18 14:16 ` Hans Aberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=501CC8FC-0348-4E6D-87D7-67AD82CD45B1@telia.com \
--to=haberg-1@telia.com \
--cc=guile-user@gnu.org \
--cc=mikesol@ufl.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).