如何在Ruby扩展中链接C库

时间:2016-09-11 03:09:41

标签: c ruby libpng

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

  

gcc -o shadow_counter shadow_counter.c -lpng

如果我不包含" -lpng"命令它不会编译并在尝试读取libpng函数时引发一堆错误("未定义引用`png_sig_cmp'"等等)

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

  

gem build shadow_png.gemspec

然后我转到Powershell并安装gem:

  

gem install shadow_png-0.0.1.gem

如果我遗漏了libpng的东西,它安装得很好,并按照它应该的方式与Ruby交谈。但是一旦我开始尝试引用libpng函数并尝试安装它,它就会开始解决我在上面看到的SAME错误(未定义引用`png_sig_cmp'等等)。所以我的理论是不知道链接命令-lpng是否包括在内。

如何将这些说明作为流程的一部分?这是我需要添加到gemspec的东西吗?还是构建gem的命令?或者它是否必须在gem安装中发生?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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