2011-05-25 109 views
2

我最近問有關在C嵌入紅寶石++應用靜態鏈接Ruby庫到C++應用程序

Embedding ruby in c++, problem with ruby libraries

現在我遇到了與此相關的另一個問題一個問題。我設法編譯和運行這個應用程序,但我無法靜態鏈接ruby。這就是我的控制檯說:

####:~/Desktop/rubyParser$ g++ -o ruby_test ruby_test.c -I/usr/lib/ruby/1.8/x86_64-linux/ -static -lruby1.8 
/usr/bin/ld: cannot find -lruby1.8 

但是,如果我開的/ usr/bin中,有一個 「ruby1.8的」 文件(沒有擴展名)。可能我需要另一個文件.. 我使用的是Ubuntu,我不是Linux專家,所以請耐心等待:)

我該如何解決?

在此先感謝

再見

回答

0

你試過將二進制到PATH?

+0

如果你的意思是這樣的:「g ++ -o ruby​​_test ruby​​_test.c -I/usr/lib/ruby​​/1.8/x86_64-linux/-I/usr/bin/-static -lruby1.8」,它不會改變一切。 – gisek 2011-05-25 13:53:43

+0

不,我的意思是:*出口$路徑:=/yourrubypath * – Jas 2011-05-25 13:54:44

+0

什麼將rubypath? /usr/lib/ruby/1.8/,這裏有一些file.rb文件; /usr/lib/ruby/1.8/x86_64-linux,這裏有一些file.so file.h;或者別的什麼? – gisek 2011-05-25 14:42:12

2

通過指定-lruby1.8連接器會尋找一個標準庫的位置(可能是/usr/lib//usr/local/lib)命名libruby1.8.so文件。

看看這些目錄,看看你有沒有這樣的東西。

如果不是,你安裝了開發包的紅寶石?如果只有鏈接過程失敗,我會認爲你有(否則,很可能你不會有頭文件)。

我從來沒有與紅寶石鏈接,但你有沒有試過指定-lruby而不是-lruby1.8

+0

+1提的紅寶石 – Jason 2011-05-25 12:24:54

+0

1的開發版本)有 「libruby1.8.so」 在/ usr/lib目錄 2)發展軟件包已安裝 3)-lruby無法正常工作 – gisek 2011-05-25 13:49:27

+0

還有更多: libruby1.8.so - > libruby1.8.so.1.8.7; libruby1.8.so.1.8 - > libruby1.8.so.1.8.7; libruby1.8.so.1.8.7; 52 libruby1.8-static.a – gisek 2011-05-25 14:22:44

0

如果您最近安裝了相關的Ruby庫,可能需要進入命令行並鍵入sudo ldconfig以使用最新版本的庫及其位置來刷新ld的配置文件。

編輯:從下面的評論,你只需要做這一步,如果你遇到一個運行時鏈接問題,你現在還沒有。但至少要記住一些事情,因爲它在過去解決了運行時鏈接問題(即幫助我實現了GMP)。

+0

OP正在遇到**鏈接**問題。'ldconfig'只創建** runtime **所需的符號鏈接。你說得對,這可能是一個問題,但不是在這個階段。 – ereOn 2011-05-25 12:27:54

+0

好的,謝謝澄清。 – Jason 2011-05-25 12:30:05