我想创建使用℃的红宝石扩展。但是,当我用gcc编译它,我得到这个错误:

gcc rubyext.c -orubyext -I /usr/local/include/ruby-1.9.1/

In file included from rubyext.c:1:
/usr/local/include/ruby-1.9.1/ruby/ruby.h:25:25: error: ruby/config.h: No such file or directory
In file included from rubyext.c:1:
/usr/local/include/ruby-1.9.1/ruby/ruby.h:107: error: ‘SIZEOF_INT’ undeclared here (not in a function)
/usr/local/include/ruby-1.9.1/ruby/ruby.h:108: error: ‘SIZEOF_LONG’ undeclared here (not in a function)
/usr/local/include/ruby-1.9.1/ruby/ruby.h:112: error: ‘SIZEOF_VOIDP’ undeclared here (not in a function)
In file included from /usr/local/include/ruby-1.9.1/ruby/ruby.h:1326,
                 from rubyext.c:1:
/usr/local/include/ruby-1.9.1/ruby/missing.h:25: error: redefinition of ‘struct timeval’
/usr/local/include/ruby-1.9.1/ruby/missing.h:35: error: redefinition of ‘struct timespec’
In file included from /usr/local/include/ruby-1.9.1/ruby/intern.h:27,
                 from /usr/local/include/ruby-1.9.1/ruby/ruby.h:1327,
                 from rubyext.c:1:
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/varargs.h:4:2: error: #error "GCC no longer implements <varargs.h>."
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/varargs.h:5:2: error: #error "Revise your code to use <stdarg.h>."
In file included from /usr/local/include/ruby-1.9.1/ruby/intern.h:29,
                 from /usr/local/include/ruby-1.9.1/ruby/ruby.h:1327,
                 from rubyext.c:1:
/usr/local/include/ruby-1.9.1/ruby/st.h:122: error: expected declaration specifiers or ‘...’ before ‘uint32_t’
In file included from /usr/local/include/ruby-1.9.1/ruby/ruby.h:1327,
                 from rubyext.c:1:
/usr/local/include/ruby-1.9.1/ruby/intern.h:508: error: expected declaration specifiers or ‘...’ before ‘rb_pid_t’
/usr/local/include/ruby-1.9.1/ruby/intern.h:526: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fork’
/usr/local/include/ruby-1.9.1/ruby/intern.h:527: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_fork_err’
/usr/local/include/ruby-1.9.1/ruby/intern.h:529: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_waitpid’
/usr/local/include/ruby-1.9.1/ruby/intern.h:530: error: expected ‘)’ before ‘pid’
/usr/local/include/ruby-1.9.1/ruby/intern.h:531: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_spawn’
/usr/local/include/ruby-1.9.1/ruby/intern.h:532: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rb_spawn_err’
/usr/local/include/ruby-1.9.1/ruby/intern.h:534: error: expected ‘)’ before ‘pid’
/usr/local/include/ruby-1.9.1/ruby/intern.h:652: error: expected declaration specifiers or ‘...’ before ‘uint32_t’

难道我错了?我的rubyext.c文件只有一行代码:

#include <ruby.h>

任何帮助不胜感激。

有帮助吗?

解决方案

当然,你不能只包含头文件,你必须链接到Ruby库。

参阅从镐本章。

也觉得免费浏览我的一些在GitHub上回购的,我写了很多C扩展的。

给我一个信息在该网站上,如果你需要帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top