在 C 语言中运行 Ruby 编译和链接问题

Running Ruby in C compile and link issues

提问人:CapnJack 提问时间:1/31/2022 更新时间:1/31/2022 访问量:90

问:

我一整天都在尝试在 C 程序中构建和运行一个简单的 Ruby。

这是一个反复出现的话题,它们都与我的问题不同,也没有任何解决方案对我有帮助。我安装了ruby-dev。

pkg-config 命令给出了这个:

  $ pkg-config --cflags --libs ruby-2.7
  -I/usr/include/x86_64-linux-gnu/ruby-2.7.0 -I/usr/include/ruby-2.7.0 -lruby-2.7 -lm

编译命令给出了以下内容:

   $ gcc -I/usr/include/x86_64-linux-gnu/ruby-2.7.0 -I/usr/include/ruby-2.7.0 -I. -lruby-2.7 -o hello *.c

   /usr/bin/ld: /tmp/ccdKXtnU.o: in function 'main': 
   hello.c:(.text+0x9): undefined reference to 'ruby_setup' 
   collect2: error: ld returned 1 exit status

我试过切换包含的顺序。我试过删除一个,然后删除另一个包含。我尝试使用Makefile并通过make运行它。我尝试将程序分解为多个文件。我尝试以符号方式将架构相对 config.h 文件链接到主头文件目录中。

我唯一能想到的我没有尝试过的是将需要链接的 ruby 对象库的名称放在命令行上,但我不知道该文件的名称或位置。

以下是该程序的最新演绎版:

  #include <stdio.h>
  #include <ruby.h>

  int main(void)
  {
    if (ruby_setup()){
            puts("Hola!");
    }
    else{
            printf("Hello World\n");
    }
    return(0);
  }
c ruby 编译器错误 链接器错误 定义引用

评论


答:

0赞 rici 1/31/2022 #1

分离的原因之一是它们在命令行中的不同位置(有时是不同的命令)。pkg-configcflagslibs

如果你要在一个命令中编译和链接,它是这样的:

c99 -o hello $(pkg-config --cflags ruby-2.7) *.c $(pkg-config --libs ruby-2.7)

这种安排是有一定逻辑的。首先,我们告诉编译器在哪里查找头文件(在编译程序之前必须看到头文件),然后在哪里找到要编译的程序,最后在哪里找到程序引用的库。

评论

0赞 CapnJack 1/31/2022
哇。就这么简单。我只是使用了我找到示例的原始文章中的示例命令行。同时使用 gcc 手册页中的选项放置。现在,如果我只能弄清楚如何让QTCreator按该顺序进行操作。但这可能是另一个问题。
0赞 rici 1/31/2022
@CapnJack:由于这始终是顺序,因此每个构建工具都可以轻松完成。