3

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

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

2 回答 2

4

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

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

所以是的,你确实需要一个编译器,而且还有更多!

于 2014-02-17T14:10:04.430 回答
1

假设您在 *nix 上,您可以使用该gcc工具首先在运行时编译源代码,通过systemperl 脚本的调用,然后进行另一个系统调用来运行生成的可执行文件。

此外,对于 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");

希望这可以帮助。

于 2014-02-17T14:25:27.600 回答