我正在构建一个相对简单的 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/