3

Windows で Ruby C 拡張機能を構築しています。これには、いくつかの外部 C ライブラリ、特に libcurl とその依存関係が必要です。curllib dll と .a ファイルがあります。ただし、extconf.rb を使用してビルドすると、常にライブラリが動的にリンクされるため、誰かが curl をインストールし、Windows パスでコンパイル済みの拡張機能を使用する必要があります。代わりに、extconf.rb で curl とその依存関係を静的にリンクして、最初に curllib をパスに追加しなくても Windows で拡張機能を使用できるようにする必要があります。

これは私の extconf.rb です

require 'mkmf'

# Name the extension.
extension_name = 'ConnectionManager'
dir_config("curl")

# Make sure the cURL library is installed.
have_library("curl")

# Create the Makefile.
create_makefile(extension_name)

これは、メイクファイルを生成するコマンドです

ruby extconf.rb --with-curl-dir=C:/Knapsack/x86-windows

extconf.rb ファイルまたはコマンドに追加して、ruby に外部ライブラリを c 拡張機能に静的にリンクさせることができるものはありますか? さらに情報が必要な場合はお知らせください。

4

2 に答える 2

2

Linuxでgif_libを使用してネイティブ拡張を作成する際にも同様の問題がありました。

以下を extconf.rb に追加してみてください:

unless find_library("curl", "curl_version")
  abort "curl is not installed, please install and try again"
end

ライブラリとエントリ ポイントが存在する場合、find_library 関数は true を返し、それを gcc の -l オプションに追加するという副作用があります。

これらのリンクが役立つことがわかりました: http://tenderlovemaking.com/2010/12/11/writing-ruby-c-extensions-part-2.html

これがC拡張です(実際の例): https://github.com/egr-ellis/ruby-giflib

于 2015-05-14T11:25:23.403 に答える
1

Visual StudioExpressを使用してRubyC拡張機能を構築したとき、MSVCRTへの依存を回避するために、nmakeコンパイラフラグをからに変更する-MD必要がありました。-MT

ファイル に$CFLAGS変数を設定しました。これらのフラグを変更する正しい方法かどうかはわかりませんが、機能しました。extconf.rb$CFLAGS = '-MT -Ot -Ox -W4'

https://bitbucket.org/thomthom/sketchup-ruby-c-extension/commits/3e87351be87f177b8ed43798587f6e798064492d

于 2013-01-04T12:33:02.647 に答える