7

对不起我的英语不好...

好吧,我现在正在使用 linux、perl 和 c++,但是我必须为大学编写一些代码,并且在编写 makefile 时遇到了一些麻烦。

我在 perl 中有一个运行良好的代码。同样,我有一个 C++ 代码,它调用 perl 作为子例程。一切正常,但是当我在计算机上执行 makefile 时,它​​显示:

sathlervbn Spam C # make clean; make
rm -f *.o
g++  -Wall  -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64  -I/usr/lib/perl/5.14/CORE     -c -o main.o main.cpp
g++ -L/usr/lib -Wall -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.14/CORE -    lperl -ldl -lm -lpthread -lc -lcrypt -o main libSpam.a main.o
/usr/bin/ld: cannot find -lperl
collect2: error: ld returned 1 exit status
make: *** [main] Error 1

问题是,当我在教授的计算机上运行 makefile 时,它​​可以工作......

这是makefile的代码:

#CC= /usr/bin/g++
CPP = g++
CPPFLAGS = -Wall $(shell perl -MExtUtils::Embed -e ccopts)

#LD= /usr/bin/g++
LD = g++

#LFLAGS = -Wall $(shell perl -MExtUtils::Embed -e ldopts)

LFLAGS = -Wall -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.14/CORE - lperl -ldl -lm -lpthread -lc -lcrypt

MAINOBJS = libSpam.a main.o

EMAILS = main

EXECS = $(EMAILS)

#Regra Implicita:
.c.o:
    $(CPP) $(CPPFLAGS) -c $<

all: emails

emails: $(EMAILS)

main: $(MAINOBJS)
    $(LD) -L/usr/lib $(LFLAGS) -o $@ $(MAINOBJS)

clean:
    rm -f *.o

有谁知道如何解决它?

4

1 回答 1

17

您需要为 C 安装 perl 库。如果您使用的是基于 Debian 的系统(包括 Ubuntu)sudo apt-get install libperl-dev或类似的系统,则可能就足够了,具体取决于您使用的 perl 版本。

更新:好的,这有点奇怪 - 我已经安装了 perl-base,它安装了 /usr/lib/libperl.so.5.14 但它没有像你那样创建 /usr/lib/libperl.so 符号链接预计。我想知道为什么不呢?如果我手动创建符号链接,ln -s /usr/lib/libperl.so.5.14 /usr/lib/libperl.so它会正确链接。

更新我安装 perl-base 的第二个,但不是 libperl-dev,它给了我/usr/lib/libperl.so.5.14但没有/usr/lib/libperl.so. 我怀疑(不确定,但强烈怀疑)正确的答案不是手动创建符号链接,而是安装 libperl-dev。

于 2013-07-10T17:25:07.410 回答