我正在構建一個相對簡單的C擴展來計算使用libpng的PNG文件中的像素;我內置在C原始版本和它編譯(和作品)的罰款在Cygwin中使用以下命令:如何鏈接Ruby庫擴展中的C庫
的gcc -o shadow_counter shadow_counter.c -lpng
如果我不包括「 -lpng「命令,它在嘗試讀取libpng函數(」undefined reference to png_sig_cmp'「等等)時不會編譯和踢出一堆錯誤。
爲了將它打包爲ruby,我把一起gemspec和文件和文件夾,並將其建成寶石:
寶石打造shadow_png.gemspec
然後我頭向PowerShell和安裝寶石:
創業板安裝shadow_png-0.0.1.gem
如果我離開出來libpng的東西,它安裝得很好,並按照它應該的方式與Ruby交談。但是一旦我開始嘗試引用libpng函數並嘗試安裝它,它會開始踢出我上面看到的SAME錯誤(未定義的引用「png_sig_cmp」等)。所以我的理論是,不知何故鏈接命令-lpng不包括在內。
作爲流程的一部分,我如何包含這些說明?這是我需要添加到gemspec的東西嗎?或者建立寶石的命令?或者它是否必須在寶石安裝中發生?
謝謝!
我認爲這是一些前瞻性的進步......與添加在安裝寶石時,我得到了以下錯誤: '在-lpng ...沒有 檢查的main()缺少PNG庫.' 這是否意味着我需要在extconf.rb文件中的某處需要libpng? – asetniop
我不知道什麼庫函數是一個很好的入庫點,但我會假設你可以使用'have_library('png','func_name')'用你正在使用的任何函數......如果這樣做不起作用,您可以考慮使用'LDLIBS'或'LDFLAGS'手動編輯鏈接器標誌。 [這是一個例子](https://github.com/boazsegev/iodine/blob/306f6b5b24b718693d5368e3ecb8a7575e51a732/ext/iodine/extconf.rb#L11-L37)來編輯環境(在這個例子中選擇了一個編譯器)。 – Myst