从Perl脚本执行C++程序;是否需要编译器?

kgqe7b3p  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(172)

这次我有一个更复杂的问题。我已经写了一个简短的Perl程序,其中我的最终输出是一个数组。我想对输出的每个元素执行Perl脚本中带有.hpp文件扩展名的C脚本(我已经从UCSC Genome Browser下载了源代码)。这对我来说真的很难,因为我是一个编程新手,对C一无所知.我读了一些书,我认为最适合我的是使用qx调用。我试过了,当我运行Perl脚本时,它只是在文本编辑器中打开.hpp文件。我不确定这是因为我错误地分配了.hpp文件扩展名,以便用编辑器打开,还是我通常需要一个编译器来运行.hpp文件。

my $info = qx(primercheck.hpp);
print "primercheck.hpp is: $info\n";
j1dl9f46

j1dl9f461#

.hpp文件是一个头文件,通常只包含宏和声明,而不包含可执行代码。它用于指定.cpp文件中代码的接口,不能独立编译。
典型的C++程序由几个.cpp.hpp文件组成,这些文件必须组合编译,然后相互链接并与库文件链接以创建可执行映像。
所以,是的,你确实需要一个编译器,还有更多!

ctehm74n

ctehm74n2#

假设您使用的是 *nix,您可以使用gcc工具首先在运行时编译源代码,通过来自perl脚本的system调用,然后进行另一个系统调用来运行生成的可执行文件。
此外,对于Borodin的回答,即使扩展名为hpp的文件有可执行代码,它也可能被编译但不会执行。一种解决方法是制作源代码的临时副本,并给予它一个cpp扩展名,然后编译它,以获得可以从Perl脚本调用的可执行代码。然而,这要求您的hpp文件实际上具有可执行代码。

# make a temp copy with cpp extension
system("cp primercheck.hpp primercheck.cpp");

# generate executable using gcc
system("gcc -o primercheck primercheck.cpp");

# set execute permissions on resulting file
system("chmod +x primercheck");

# call the executable
system("./primercheck");

# remove the temp cpp file
system("rm primercheck.cpp");

# optional - remove the executable file as well
system("rm primercheck");

希望这对你有帮助。

相关问题