C++ 找不到-lperl正在c++;

C++ 找不到-lperl正在c++;,c++,perl,makefile,C++,Perl,Makefile,对不起,我的英语不好 我现在是Linux、Perl和C++,但是我必须为大学做一些代码,在做Mag文件时我遇到了一些麻烦。 我有一个perl代码,它运行得非常好。同样,我有C++中的代码,它把Perl称为子程序。一切都正常工作,但当我在计算机上创建makefile时,它会显示: sathlervbn Spam C # make clean; make rm -f *.o g++ -Wall -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protect

对不起,我的英语不好

我现在是Linux、Perl和C++,但是我必须为大学做一些代码,在做Mag文件时我遇到了一些麻烦。 我有一个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
#CC=/usr/bin/g++
CPP=g++
CPPFLAGS=-Wall$(shell perl-MExtUtils::Embed-ecopts)
#LD=/usr/bin/g++
LD=g++
#LFLAGS=-Wall$(shell perl-MExtUtils::Embed-eldopts)
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
电子邮件=main
执行官=$(电子邮件)
#间接赔偿:
.c.o.:
$(CPP)$(CPPFLAGS)-c$<
全部:电子邮件
电子邮件:$(电子邮件)
main:$(MAINOBJS)
$(LD)-L/usr/lib$(LFLAGS)-o$@$(MAINOBJS)
清洁:
rm-f*.o

有人知道怎么解决吗

您需要安装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
。我怀疑(不确定,但强烈怀疑)正确的答案不是手工制作这个链接,而是安装LiPerl DeV.< /P>“我有一个C++代码,叫Perl”=请告诉我们代码,否则我们怎么知道你哪里出了错?@ SyAM,他有链接问题,不是编译问题。我不认为代码是相关的。@PaulTomblin这正是我没有把代码放进去的原因。@PaulTomblin当然,但是,看看他如何在代码中调用它可能会很有趣。我不会像建议他没有安装
libperl dev
那样严厉,所以它必须是不太明显的东西,对吧?事实上,我只是尝试用-lperl编译一个简单的C文件,它告诉我
/usr/bin/ld:cannot find-lperl
-C文件根本不调用任何perl代码。当我做apt时,它说已经安装了。仍然存在找不到-lperl的问题。@请参阅我的更新。尝试手动创建链接。你可能需要像根一样做。非常感谢你,兄弟。你救了我-“我怀疑……”没必要怀疑任何事情,这才是真正的问题。看来我错误地认为你和OP安装了
-dev
软件包。。。(我们都知道,假设使u&me:p变成as*),但为了我自己的辩护,我不确定你一开始是否使用Debian系统当你想围绕一个库进行开发时,在Debian系统上,你需要
-dev
软件包来安装头文件和动态链接库所需的任何东西。答案是永远不要在系统目录中对随机库进行符号链接。