[英]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 文件符號鏈接到主 header 文件目錄中。
我能想到的唯一沒有嘗試過的是將需要在命令行中鏈接的 ruby object 庫的名稱放在命令行中,但我不知道該文件的名稱或位置。
這是該程序的最新版本:
#include <stdio.h>
#include <ruby.h>
int main(void)
{
if (ruby_setup()){
puts("Hola!");
}
else{
printf("Hello World\n");
}
return(0);
}
pkg-config
將cflags
和libs
分開的原因之一是它們 go 在命令行的不同位置(有時是不同的命令)。
如果你要在一個命令中編譯和鏈接,它是這樣的:
c99 -o hello $(pkg-config --cflags ruby-2.7) *.c $(pkg-config --libs ruby-2.7)
這種安排有一定的邏輯。 首先,我們告訴編譯器在哪里尋找 header 文件(在編譯程序之前它必須看到),然后在哪里找到要編譯的程序,最后在哪里找到程序引用的庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.