簡體   English   中英

在 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 文件符號鏈接到主 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-configcflagslibs分開的原因之一是它們 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM