2012-07-25 44 views
0

我試圖加載一個簡單的TCL擴展,但我不斷收到以下錯誤:TCL加載錯誤無法加載文件libfoo.so

 
couldn't load file "libfoo.so": ld.so.1: tclsh8.4_64: fatal: libfoo.so: open failed: No such file or directory 

我使用的例子從TCL man page 但我不知道我在這裏做錯了什麼。我正在編譯Solaris上的庫使用:

 
cc -KPIC -c -I/opt/external/tcl-8.5.8/include foo.c 
cc -shared -R/opt/external/tcl-8.5.8/i386/lib -L/opt/external/tcl-8.5.8/i386/lib -o libfoo.so foo.o 

有人可以請建議如何調試該問題?

+0

很高興看到我的例子正在幫助某人。 – 2012-07-25 08:39:44

回答

0

這裏有兩個問題。

  1. 傳遞給load的庫的文件名應該可能有一個目錄分隔符。當目錄分隔符存在時,這會抑制操作系統對庫的搜索,這是您想要的東西,因爲您已經知道它在哪裏。
  2. 您似乎在嘗試將庫文件load轉換爲舊版本的Tcl,而不是鏈接它。 (您也可能試圖將32位版本加載到64位可執行文件中。)這是消失不太可能工作。鏈接您希望支持的最古老的Tcl版本;在開發時,最好通過鏈接到要加載的Tcl的確切版本來完成,對於生產,您應該看到Tcl_InitStubs聯機幫助頁以獲取詳細信息。
+0

請注意,我已經鏈接到8.6版本的聯機幫助頁,只是因爲格式更好。 8.5和8.4中的內容也是相同的,但自動生成的頁面佈局較爲緩慢。 – 2012-07-25 08:41:03

+0

謝謝Donal,一旦我指定了錯誤消失的完整路徑。另外,我修復了我正在使用的庫。 – 2012-07-25 16:31:47