/ usr / bin / ld:错误:找不到-lecl

时间:2012-09-20 15:42:11

标签: c gcc compiler-errors common-lisp ecl

我正在尝试编译Example of a C program embedding ECL with callbacks to C functions. github。我已经通过使用git clone git://git.code.sf.net/p/ecls/ecl ecl然后$ make# make install克隆ECL仓库来安装ECL (Embeddable Common Lisp),并且安装似乎没问题,至少ECL Developers' Guide: 2.6 Compiler examples编译正常。

尝试使用gcc ecldemo.c -lecl编译ecldemo.c时出现以下错误:

/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的库)。在-leclgcc 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仍然存在。

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

请勿直接指定-lecl-L...,而是使用ecl-config

gcc `ecl-config --cflags` ecldemo.c -o ecldemo `ecl-config --libs`

答案 2 :(得分: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