ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: xtkoba+ruby@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:103325] [Ruby master Bug#17788] ruby 3.0.0 - compiling c++ extension on alpine fails
Date: Fri, 09 Apr 2021 00:17:26 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-91415.20210409001725.51520@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-17788.20210408230315.51520@ruby-lang.org

Issue #17788 has been updated by xtkoba (Tee KOBAYASHI).

File ruby-ruby_nonempty_memcpy-musl-cxx.patch added

Repro (named `bug17788.cc`):
```c
#include <sys/types.h>

//extern "C" {
void *
ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
{
  return dest;
}
//}

#undef memcpy
#define memcpy ruby_nonempty_memcpy

#include <iostream>
```

```
$ x86_64-unknown-linux-musl-g++ -c bug17788.cc
bug17788.cc:13:16: error: conflicting declaration of 'void* ruby_nonempty_memcpy(void*, const void*, size_t)' with 'C' linkage
   13 | #define memcpy ruby_nonempty_memcpy
      |                ^~~~~~~~~~~~~~~~~~~~
bug17788.cc:6:1: note: previous declaration with 'C++' linkage
    6 | ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
      | ^~~~~~~~~~~~~~~~~~~~
```

A patch is attached for a workaround which wraps up the definition of `ruby_nonempty_memcpy` with `extern "C" { ... }`.


----------------------------------------
Bug #17788: ruby 3.0.0 - compiling c++ extension on alpine fails
https://bugs.ruby-lang.org/issues/17788#change-91415

* Author: memel (Maia Engeli)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux-musl]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
Compiling gem with C++ extension fails on alpine 3xx with Ruby 3.0.0 and Ruby 3.0.1 
(does not fail on Ubuntu 18 ¯\\_(ツ)_/¯)

Error:

```
compiling testgem.cc
In file included from /root/.rbenv/versions/3.0.0/include/ruby-3.0.0/ruby/ruby.h:39,
                 from /root/.rbenv/versions/3.0.0/include/ruby-3.0.0/ruby.h:38,
                 from testgem.cc:2:
/root/.rbenv/versions/3.0.0/include/ruby-3.0.0/ruby/internal/memory.h:275:16: error: conflicting declaration of 'void* ruby_nonempty_memcpy(void*, const void*, size_t)' with 'C' linkage
  275 | #define memcpy ruby_nonempty_memcpy
      |                ^~~~~~~~~~~~~~~~~~~~
/root/.rbenv/versions/3.0.0/include/ruby-3.0.0/ruby/internal/memory.h:265:1: note: previous declaration with 'C++' linkage
  265 | ruby_nonempty_memcpy(void *dest, const void *src, size_t n)
      | ^~~~~~~~~~~~~~~~~~~~
```

Code for reproduction:

extconf.rb
```
require 'mkmf'
create_makefile 'testgem'
```

testgem.cc
```
#include <stdio.h>
#include <ruby.h>
#include <iostream>

VALUE says(VALUE _self, VALUE str) {
    Check_Type(str, T_STRING);
    puts(StringValueCStr(str));
    return Qnil;
}

void Init_testgem() {
    VALUE mod = rb_define_module("Simon");
    const int num_args = 1;
    std::cout << "*** testgem initialized ***" << std::endl;
    rb_define_module_function(mod, "says", says, num_args);
}

---Files--------------------------------
testgem.cc (394 Bytes)
extconf.rb (41 Bytes)
ruby-ruby_nonempty_memcpy-musl-cxx.patch (370 Bytes)


-- 
https://bugs.ruby-lang.org/

  reply	other threads:[~2021-04-09  0:17 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-08 23:03 [ruby-core:103323] [Ruby master Bug#17788] ruby 3.0.0 - compiling c++ extension on alpine fails maia
2021-04-09  0:17 ` xtkoba+ruby [this message]
2021-04-09  1:37 ` [ruby-core:103327] " shyouhei
2021-04-29 14:28 ` [ruby-core:103658] " xtkoba+ruby
2022-03-13  6:43 ` [ruby-core:107873] " nagachika (Tomoyuki Chikanaga)

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-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-91415.20210409001725.51520@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /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).