从Perl脚本执行C++程序;它是否需要编译器
Execute C++ program from Perl script; does it require a compiler?
这次我有一个更复杂的问题。我写了一个简短的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");
希望这有帮助。
相关文章:
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- __CHAR_BIT__宏是否为 MSVC 编译器预定义?
- 如何检测VS C++编译器是否支持C++11?
- 编译器是否必须始终删除 try-catch 块(如果它被证明是非抛出的)
- 是否允许编译器省略对指针的 &* 运算符的组合调用?
- 编译器是否强制根据模板参数计算表达式?
- Visual Studio 中是否有来自代码块的编译器标志的类似物?
- C++编译器是否优化了顺序静态变量读取?
- c++ 编译器是否保护常量内存地址免受任何更改?
- 不同版本的编译器(例如GCC)是否会产生不同的性能?
- G++ 编译器是否在未使用返回值的情况下将 constexpr 函数视为常规函数?
- 编译器是否对 std::frexp 进行了内联调用?
- 是否可以将不同的编译器嵌入到我的应用程序中?
- GCC 编译器是否应该对涉及 [[fallthrough]] 属性的格式错误的C++代码进行诊断?
- 当作为参数传入时,是否可以由编译器指定模板类参数?
- 是否有任何 2 补充平台/编译器,其中有符号移位不做通常的事情?
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 是否允许编译器优化掉局部易失性变量