0

C関数へのコールバックを使用してECLを埋め込むCプログラムの例 をコンパイルしようとしています。ギットハブ。ECL リポジトリをand とで複製してECL (Embeddable Common Lisp)をインストールしました。インストールは問題ないようです。少なくともECL 開発者ガイド: 2.6 コンパイラの例は正常にコンパイルされます。git clone git://git.code.sf.net/p/ecls/ecl ecl$ make# make install

ecldemo.cをコンパイルしようとするとgcc ecldemo.c -lecl、次のエラーが発生します。

/usr/bin/ld: error: cannot find -lecl
/tmp/ccRk8Q48.o:ecldemo.c:function foo: error: undefined reference to 'ecl_make_integer'
/tmp/ccRk8Q48.o:ecldemo.c:function bar: error: undefined reference to 'ecl_make_integer'
/tmp/ccRk8Q48.o:ecldemo.c:function ecl_call: error: undefined reference to 'ecl_make_simple_base_string'
/tmp/ccRk8Q48.o:ecldemo.c:function ecl_call: error: undefined reference to 'si_string_to_object'
/tmp/ccRk8Q48.o:ecldemo.c:function ecl_call: error: undefined reference to 'si_safe_eval'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'cl_boot'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'cl_shutdown'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'ecl_make_simple_base_string'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'si_string_to_object'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'ecl_def_c_function'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'ecl_make_simple_base_string'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'si_string_to_object'
/tmp/ccRk8Q48.o:ecldemo.c:function init: error: undefined reference to 'ecl_def_c_function'
/tmp/ccRk8Q48.o:ecldemo.c:function main: error: undefined reference to 'ecl_make_simple_base_string'
/tmp/ccRk8Q48.o:ecldemo.c:function main: error: undefined reference to 'si_string_to_object'
/tmp/ccRk8Q48.o:ecldemo.c:function main: error: undefined reference to 'si_safe_eval'
/tmp/ccRk8Q48.o:ecldemo.c:function main: error: undefined reference to 'cl_print'
/tmp/ccRk8Q48.o:ecldemo.c:function main: error: undefined reference to 'cl_equal'
collect2: error: ld returned 1 exit status

私はこのエラー行のだろうか:

/usr/bin/ld: error: cannot find -lecl

どういうわけか、ソースファイルとしてgcc解釈され、オプションとしてではなく( という名前のライブラリを検索する)必要があるように思えます。と( )の間にスペースを入れても意味がありません。出力は同じです ( )。-lecl-l librarylibrary-leclgcc ecldemo.c -l eclcannot find -lecl

ecl.h/usr/local/include/ecl/あり、ecldemo.cに含まれているため、オプション#include "ecl/ecl.h"でライブラリディレクトリを追加してみました:-L

gcc -L /usr/local/include/ecl ecldemo.c -l ecl

...しかし、役に立たず、同じエラーがusr/bin/ld: error: cannot find -lecl続きました。

このエラーを引き起こす可能性のあるアイデアと、これを修正する方法はありますか?

4

3 に答える 3

8

あなたの-L選択肢は間違っています。ヘッダー ファイルの場所ではなく、ライブラリの場所を指定する必要があります。libecl.soライブラリは、またはlibecl.aそのようなものと呼ばれる可能性が最も高いです。

于 2012-09-20T15:44:57.180 に答える
0

http://ecls.sourceforge.net/ecldev/Compiler-examples.htmlに基づく

;;; Invoking external command: gcc -o "libmyecl.so" -L"/usr/lib/ecl/" "myecl.o" "hello.o"  -Wl,–rpath,/usr/lib/ecl/ -shared   -lecl -lgmp -lgc -ldl -lm

私はあなたが必要だと思います

gcc -L/usr/lib/ecl ecldemo.c -lecl
于 2012-09-20T15:49:04.643 に答える