2016-08-13 60 views
2

我需要編譯和靜態鏈接一個雞程序。我期望使用很多擴展,最值得注意的是http-client如何靜態鏈接使用擴展程序的Chicken計劃程序?

我可以編譯使用以下命令來源:

csc -compile-syntax -static linux-setup.scm 

csc -R http-client -compile-syntax -static linux-setup.scm 

但是當我運行它,我得到以下錯誤:

Error: (require) cannot load extension: http-client 

    Call history: 

    ##sys#require   <-- 

我有在源碼中也嘗試(declare (uses http-client)),但沒有成功:

linux-setup.o: In function `f_369': 
/mnt/data/Documents/Programming/chicken-scheme/linux-setup/linux-setup.c:219: 
undefined reference to `C_http_2dclient_toplevel' 
collect2: error: ld returned 1 exit status 

Error: shell command terminated with non-zero exit status 256: 'gcc' 'linux-setup.o' 
-o 'linux-setup' -L"/usr/lib" -Wl,-R"/usr/lib" -static '/usr/lib/libchicken.a' -lm -ldl 

靜態鏈接是我的東西我需要。這不是一個XY問題。我需要我的可執行文件可以在沒有依賴關係的新安裝的Linux系統上運行。這是我首先從Common Lisp切換到Scheme的主要原因。

我在做什麼錯?

回答

1

假設你的程序是在-program.scm文件:

csc -deploy a-program.scm 
cd a-program/ 
chicken-install -deploy -p $PWD http-client 

...等瞧!

編輯:結果是正確的答案,發表在這個文件中解決了這個問題:http://www.foldling.org/scheme.html#compiling-statically-linked-chicken-scheme-programs-with-extensions

+0

嗯,這是很方便的知道...和技術上** **將上一個新的Linux上運行安裝...但它不是我的問題的答案,這是「如何在一個可執行文件中獲取所有內容?」運行'chicken-install'後,$ PWD中有一百九十個文件。也就是說,我覺得有點過分。 –

+0

我不是故意的,但問題是「我需要我的可執行文件在沒有依賴的新安裝的Linux系統上運行(...)我在做什麼錯誤? ;)無論如何,有一種乏味的方式聲稱構建一個可以爲你工作的自包含的可執行文件:http://www.foldling.org/scheme.html#compiling-statically-linked-chicken-scheme-programs-with -extensions - 注意-deploy已經在a-program中創建了.o文件/ - 但是這可能比僅僅csc -static a-program.o a-program/*。o -o aprog更難...祝你好運! – dercz

+0

ps也許你也可以嘗試gambit-c,它爲我工作,但我沒有搞亂包比其他比匹配器和irregex ... – dercz

相關問題