提问人:CapnJack 提问时间:1/31/2022 更新时间:1/31/2022 访问量:90
在 C 语言中运行 Ruby 编译和链接问题
Running Ruby in C compile and link issues
问:
我一整天都在尝试在 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);
}
答:
0赞
rici
1/31/2022
#1
分离的原因之一是它们在命令行中的不同位置(有时是不同的命令)。pkg-config
cflags
libs
如果你要在一个命令中编译和链接,它是这样的:
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:由于这始终是顺序,因此每个构建工具都可以轻松完成。
评论