本机 C 扩展(如果库可用)

发布于 2024-11-16 22:58:21 字数 229 浏览 3 评论 0原文

我正在构建一个本机 C 扩展 Ruby gem,用于生成唯一标识符(可在此处找到)。我希望库尽可能使用 libuuid (通过 C 扩展)并回退到简单的 Ruby 实现。我目前拥有用于生成 UUID 的 C 和 Ruby 代码,但是我不知道如何配置成功的后备。有什么想法吗?

I'm building a native C extension Ruby gem for generating unique identifiers (found here). I'd like the library to use libuuid if possible (through C extensions) and fall back to a simple Ruby implementation. I currently have both the C and Ruby code for generating the UUID, however I can't figure out how to configure a successful fallback. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

锦欢 2024-11-23 22:58:21

have_library方法有一个返回值:

返回是否可以在 lib 中找到给定的入口点 func

因此,您应该能够执行以下操作:

$defs.push('-DUSE_RUBY_UUID') if !have_library('uuid')
create_makefile("identifier")

然后,如果未定义 USE_RUBY_UUID ,则将 C 设置为使用 libuuid ;如果已定义,则调用 Ruby UUID 库。

奇怪的是,have_header< /a> 和 have_func 方法 < code>mkmf.rb 为您添加宏:

# File mkmf.rb, line 840
def have_header(header, preheaders = nil, &b)
  checking_for header do
    if try_header(cpp_include(preheaders)+cpp_include(header), &b)
      $defs.push(format("-DHAVE_%s", header.tr_cpp))
      true
    else
      false
    end
  end
end

但是 have_library 让您自己完成。

The have_library method has a return value:

Returns whether or not the given entry point func can be found within lib.

So you should be able to do this:

$defs.push('-DUSE_RUBY_UUID') if !have_library('uuid')
create_makefile("identifier")

And then set up your C to use libuuid if USE_RUBY_UUID is not defined and call into the Ruby UUID library if it is defined.

Oddly enough, the have_header and have_func methods in mkmf.rb add macros for you:

# File mkmf.rb, line 840
def have_header(header, preheaders = nil, &b)
  checking_for header do
    if try_header(cpp_include(preheaders)+cpp_include(header), &b)
      $defs.push(format("-DHAVE_%s", header.tr_cpp))
      true
    else
      false
    end
  end
end

but have_library makes you do it yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文