设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4782|回复: 29
打印 上一主题 下一主题

[有事请教] Ruby1.9.2怎么在MSVC++里面运行?

[复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2011-9-21 23:10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
就是那个DLL的方式我是知道怎么用的API我也都会。
1.8的我也用过也可以用。
1.8的include还有1.9的include我是直接用RGE的Include
然后这次重装把svn密码弄没了……
求助include和lib是怎么弄到的?
我用VS2010编译了Ruby1.9.2,
.ext目录下面的include不对根本没有ruby.h
Ruby根目录下面和编译的的include提示各种少东西……

lib倒是有了叫做msvcr100-ruby191。
可是我又不能把这个版本的Ruby发布出去,(或者有什么办法支持库和so?)
RubyInstaller安装的Ruby是msvcrt-ruby191.dll……
所有环境都是VS2010+VC++
求解释怎么得到include!


yangff于2011-9-21 23:11补充以下内容:
如果不行的话我就只能用管道了……
哎呀,蛋疼什么的最有爱了

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
2
发表于 2011-9-22 04:38:10 | 只看该作者
本帖最后由 苏小脉 于 2011-9-22 04:54 编辑

CRuby 实现是依赖 autoconf 来组建的,你的工程也用 autoconf 便最好,便不用,至不济也可把需要的那几个宏一一定义了,之后再包含 include 下的 ruby.h 便无事。autoconf 依赖的宏多是一些决定环境的旗帜,如当前编译环境是否有 intptr_t、long long,指针大小是 32 位还是 64 位等。近年来也有不少人反映 autoconf 用户友好性低下,有不少同好转去 CMake,只是 hardcore GNU 或是已熟练于 GNU 工具链的用户仍情有独钟。

其实 Ruby 那些头文件中有不少名字污染(并未以 rb_ 为前缀的标识符),把你需要的类型声明、宏、接口原型从头文件中提取出来,便可在避免命名冲突的同时也无须和 autoconf 打交道,此法只移植性差些。写 Ruby 扩展往往不用考虑这些,因标准库中的 mkmf 就相当于 Ruby 版的 autoconf 了,配置妥当后直接根据环境生成 Makefile。若是嵌入 Ruby,通常就需要做更多工作。像 RGE2 目前就从 Ruby 头文件中提取了常用的结构、宏和原型,同时也区分了 1.8 和 1.9 的头文件差异(这也反映了 CRuby 双向兼容之不足)。RGE2 的 SVN 工程可以匿名签出,无须用户名,杨卿不妨参考。

.lib 文件是微软平台下用于链接时导入符号的导入库,此种文件无须发布,仅用于组建工程时,需要发布的是 .dll,盖实际代码储存于其中。如果是 MinGW 编译的 Win32 DLL,那便连 .lib 也可免去,直接链接 DLL 即可。MSVC 的则须同时生成 .lib 和 .dll。Win32 下以相同代码生成的 .so 文件和 .dll 文件只有二进制层级区别,并无实质程序行为区别,只是按 Un*x 命名习俗,(动态)共享库扩展名为 so(静态库为 .a)罢了。

点评

杨卿  发表于 2011-9-22 23:37
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
 楼主| 发表于 2011-9-22 19:22:58 | 只看该作者
本帖最后由 yangff 于 2011-9-22 19:23 编辑
苏小脉 发表于 2011-9-22 04:38
CRuby 实现是依赖 autoconf 来组建的,你的工程也用 autoconf 便最好,便不用,至不济也可把需要的那几个宏 ...


RGE用C++是可以编译的。不过问题在于我根本找不到一个可以用的include文件。会提示socket什么的莫名其妙错误……但是nmake是可以编译。纠结……
关键是SVN的地址也丢了……硬盘悲剧了
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
4
发表于 2011-9-22 21:33:36 | 只看该作者
yangff 发表于 2011-9-22 19:22
RGE用C++是可以编译的。不过问题在于我根本找不到一个可以用的include文件。会提示socket什么的莫名其妙 ...

RGE 当然可以编译,因为提取工作都做好了。或许我没理解你的需求,nmake 你只要用的是 cl + link 工具链那就是“MSVC 编译”的了。你还想怎样?
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

5
 楼主| 发表于 2011-9-22 21:36:07 | 只看该作者
苏小脉 发表于 2011-9-22 21:33
RGE 当然可以编译,因为提取工作都做好了。或许我没理解你的需求,nmake 你只要用的是 cl + link 工具链 ...

好吧……我的问题就是是怎么提取的,还有我用VC编译的程序里面用VC编译的ruby的lib和头,那我发布的时候直接让用户安装由mingw编译的RubyInstaller会有问题吗?
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
6
发表于 2011-9-22 21:59:53 | 只看该作者
yangff 发表于 2011-9-22 21:36
好吧……我的问题就是是怎么提取的,还有我用VC编译的程序里面用VC编译的ruby的lib和头,那我发布的时候 ...

用到的什么就从头里复制粘贴出来,遇到根据环境而变的定义时选择符合你当前环境的(如 VS2010 支持stdint.h,那 VALUE 类型就可定义为 uintptr_t)。Ruby 本身用工程提供的 nmake 配置组建。

我用VC编译的程序里面用VC编译的ruby的lib和头,那我发布的时候直接让用户安装由mingw编译的RubyInstaller会有问题吗?

VC 7.0 以后编译会生成 msvcr*-ruby???.dll,MinGW 编译会生成 msvcrt-ruby???.dll,两者链接的 CRT 实现版本不同。msvcrt.dll 是系统组件,而 msvcr*.dll 则是针对 Visual Studio 7.0 以后版本的。据 MinGW 的文档所说,链接到 msvcrt.dll 是为了避免许可问题。你如果用 MSVC 成功编译了 Ruby,那发布 msvcr*-ruby???.dll 就行了。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

7
 楼主| 发表于 2011-9-22 23:09:47 | 只看该作者
苏小脉 发表于 2011-9-22 21:59
用到的什么就从头里复制粘贴出来,遇到根据环境而变的定义时选择符合你当前环境的(如 VS2010 支持stdint ...

用到什么复制什么?那那些什么defines.h,config.h什么的都不要直接从Ruby.h里面复制?

就是不能发布成msvcr*-ruby啊……那样用gem和库有问题,RubyInstaller的比较方便的说……
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
8
发表于 2011-9-23 00:46:36 | 只看该作者
yangff 发表于 2011-9-22 23:09
用到什么复制什么?那那些什么defines.h,config.h什么的都不要直接从Ruby.h里面复制?

就是不能发布成m ...

config.h 那些是 autoconf 生成的环境配置,你如果只是以二进制形式发布工程,那直接配置为你当前的 build 环境就行了,不用理会 autoconf 的那堆宏。

"遇到根据环境而变的定义时选择符合你当前环境的(如 VS2010 支持stdint.h,那 VALUE 类型就可定义为 uintptr_t)”。

就是不能发布成msvcr*-ruby啊……那样用gem和库有问题,RubyInstaller的比较方便的说……

只要你的 Gem 路径是正确的,会有什么问题?又不像 RM 一样没导出 Ruby API。至少我至今为止没发现问题。

点评

RM倒是导出了ruby的api  发表于 2011-9-23 19:06
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

9
 楼主| 发表于 2011-9-23 19:06:29 | 只看该作者
苏小脉 发表于 2011-9-23 00:46
config.h 那些是 autoconf 生成的环境配置,你如果只是以二进制形式发布工程,那直接配置为你当前的 buil ...

gem路径要怎么设置?用api的形式的话。还有我直接用Ruby的DLL,也即是#include <ruby.h>的时候都不能用so啊……
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
10
发表于 2011-9-23 23:26:11 | 只看该作者
yangff 发表于 2011-9-23 19:06
gem路径要怎么设置?用api的形式的话。还有我直接用Ruby的DLL,也即是#include 的时候都不能用so啊…… ...

什么叫 “API 形式”?难道你还不在 Ruby 里用 Gem?Gem 一般都只是导出了一个 Init_* 入口点,其余函数都直接封装到 Ruby 空间了。你可以在一个配置良好的 Ruby 环境中打印出 $: 这个全局变量的值,就知道如何配置 Gem 路径了。

RM倒是导出了ruby的api

此话怎讲?
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-7-19 20:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表