c - 如何在 Ruby 扩展中链接 C 库

标签 c ruby libpng

我正在构建一个相对简单的 C 扩展来使用 libpng 计算 PNG 文件中的像素;我用 C 语言构建了原始版本,它可以使用以下命令在 Cygwin 中正常编译(并工作):

gcc -o shadow_counter shadow_counter.c -lpng

如果我不包含“-lpng”命令,它将无法编译并在尝试读取 libpng 函数时抛出一堆错误(“对‘png_sig_cmp’的 undefined reference ”等)

为了将其打包为 ruby​​,我将 gemspec 以及文件和文件夹放在一起,并将其构建为 gem:

gem build shadow_png.gemspec

然后我转到 Powershell 并安装 gem:

gem install shadow_png-0.0.1.gem

如果我省略 libpng 的东西,它会安装得很好,并按照它应该的方式与 Ruby 对话。但是,一旦我开始尝试引用 libpng 函数并尝试安装它,它就会开始抛出我在上面看到的相同错误(对“png_sig_cmp”的 undefined reference 等)。所以我的理论是,不知何故不包括链接命令 -lpng 。

如何将这些说明纳入流程?我需要将其添加到 gemspec 中吗?或者构建 gem 的命令?还是必须在 gem 安装中发生?

谢谢!

最佳答案

我认为您正在寻找 have_library方法,放置在您的 extconf.rb 文件中。

abort 'Missing PNG library.' unless have_library('png')

关于c - 如何在 Ruby 扩展中链接 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39432484/

相关文章:

c - WELLRNG512 的实现

澄清并记住 C 中的 const 用法

c - 如何在不执行else的情况下从if状态跳转?

c - c 中运算符的地址和左值

ruby-on-rails - 在rails Controller 中封装实例变量?

ruby - 如何从 CSV.read 中的 CSV 文件中获取标题,而 ruby​​ 中只有标题行

MYSQL错误time.now

c++ - 从 libpng 加载的 png 纹理在 OpenGL 中显示为黑色

c++ - 在Mac OS X上构建SuperTuxKart(无法创建符号链接(symbolic link) 'lib/libpng.pc' : No such file or directory)

iphone - 在 iPhone 上加载 PNG 图像失败,但在模拟器中工作