我正在尝试编译嵌入 ECL 的 C 程序示例,其中包含对 C 函数的回调。 github。我已经通过克隆 ECL repo安装了ECL (Embeddable Common Lisp)git clone git://git.code.sf.net/p/ecls/ecl ecl
,然后使用$ make
and # make install
,安装似乎没问题,至少ECL Developers' Guide: 2.6 Compiler examples编译得很好。
尝试编译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 library
(搜索名为 的库library
)。-l
在和ecl
( )之间留一个空格gcc ecldemo.c -l ecl
没有帮助,输出是相同的 ( cannot 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
仍然存在。
任何想法可能导致此错误以及如何解决此错误?