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

Execute C++ program from Perl script; does it require a compiler?

本文关键字:是否 编译器 程序 Perl 脚本 执行 C++      更新时间:2023-10-16

这次我有一个更复杂的问题。我写了一个简短的Perl程序,其中我的最终输出在一个数组中。我想在我的Perl脚本中对输出的每个元素执行一个带有.hpp文件扩展名的C++脚本(我已经从UCSC基因组浏览器下载了源代码)。这对我来说真的很困难,因为我是整体编程的初学者,对C++一无所知。 我已经做了一些阅读,我认为对我来说最好的是使用 qx 调用。我已经尝试过了,当我运行Perl脚本时,它只是在文本编辑器中打开.hpp文件。我不确定这是否是因为我错误地分配了要用编辑器打开的 .hpp 文件扩展名,或者我是否需要编译器来运行 .hpp 文件。

my $info = qx(primercheck.hpp);
print "primercheck.hpp is: $infon";

.hpp文件是一个头文件,通常只包含宏和声明,而不是可执行代码。它用于指定.cpp文件中编码的接口,不能自行编译。

典型的C++程序由多个.cpp.hpp文件组成,这些文件必须组合编译,然后相互链接并与库文件链接以创建可执行映像。

所以是的,你确实需要一个编译器,除此之外还有更多!

假设你在 *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");

希望这有帮助。