0

我正在尝试编译嵌入 ECL 的 C 程序示例,其中包含对 C 函数的回调。 github。我已经通过克隆 ECL repo安装了ECL (Embeddable Common Lisp)git clone git://git.code.sf.net/p/ecls/ecl ecl,然后使用$ makeand # make install,安装似乎没问题,至少ECL Developers' Guide: 2.6 Compiler examples编译得很好。

尝试编译ecldemo.cgcc 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仍然存​​在。

任何想法可能导致此错误以及如何解决此错误?

4

3 回答 3

8

你的-L选择是错误的。您需要告诉它在哪里可以找到,而不是在哪里可以找到头文件。该库很可能被称为libecl.solibecl.a类似的名称。

于 2012-09-20T15:44:57.180 回答
1

不要指定-lecl-L...直接使用ecl-config

gcc `ecl-config --cflags` ecldemo.c -o ecldemo `ecl-config --libs`
于 2017-08-03T03:24:12.830 回答
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 回答