2011-12-03 38 views
2

我知道很多以前也问过这个问题,但据我所看到的,有没有明确的答案,可以帮助C++初学者。所以,这里是我的问题(或者如果你喜欢,请求),调用外部文件(如可执行文件)在C++在跨平台的方式

假设我正在使用Xcode或任何文本编辑器编写C++代码,并且我想使用另一个C++程序中提供的一些工具。例如,一个可执行文件。那么,如何在代码中调用该可执行文件?

此外,可以予漏洞在C++程序提供并且通过该调用技术在我的C++代码使用它们其它功能/对象/类?或者它只是我可以打电话的可执行文件?

我希望有人可以提供一个明确的答案初学者可以吸收...:P

+0

你的意思是像'exec *'函数? – Shahbaz

+1

您对可执行文件的第一个问题听起来像使用'exec'或'system'。第二个是关于[库](http://en.wikipedia.org/wiki/Library_(computing)#Shared_libraries)。 – birryree

回答

3

所以,我怎么能叫,在我的代码的可执行文件?

最简单的方法是使用system()。例如,如果可执行文件被称为工具,那么:

system("tool"); 

但是,这种技术有很多注意事项。这个调用只是要求操作系统做些事情,但每个操作系统都可以理解或回答相同的命令。

例如:

system("pause"); 

...将工作在Windows中,停止exectuion,而不是在其他操作系统。此外,有关文件路径内部空间的规则也是不同的。最后,即使分隔栏也可以不同(仅适用于Windows)。

而且可我还利用其它功能/目的/班...从C++ ,并通过这个呼叫技术,我的C++代码使用它们?

不是。如果你想使用别人创建的类或函数,你将不得不为他们获取源代码并用你的程序进行编译。如果源代码足够小,这可能是最简单的方法之一。

很多时候,人们创建库,这是非常有用的类和/或功能的集合。如果库以二进制形式分发,那么您需要dll文件(或其他操作系统的等效文件)以及描述库中提供的类和函数的头文件。对于C++程序员来说,这是一个令人沮丧的源泉,因为即使在同一个操作系统中使用不同编译器创建的库可能也是不兼容的。这就是为什么很多时候库以源代码形式分发的原因,以及如前所述的一系列指令(makefile或更糟糕的)在单个文件中获取二进制版本以及头文件。

这是因为C++标准并不低层次的东西,一个编译器内发生。有许多实现细节可供编译器供应商随意使用,以达到更好的性能。这不幸意味着很难分发一个简单的库。

+0

感谢您的详细解答。好的,说我有我想要使用的程序的源代码。然后说,我想写一个主代码并在源代码中为它创建一个可执行文件。我读到我可以通过修改Makefile来做到这一点,并且我在一定程度上学会了如何做到这一点。但是,这个源代码有:Makefile.am,Makefile.in和Makefile。现在要修改哪一个?那之后该怎么办?我知道这是一个新问题。如果你喜欢我可以写在一个单独的问题帖子。 – stupidity

+0

看看http://en.wikipedia.org/wiki/Make_(software)和http://en.wikipedia.org/wiki/GNU_build_system Makefile.in和Makefile.am与Automake和Autoconf有关, GNU构建系统的一部分。看看这里:http://stackoverflow.com/questions/2531827/what-are-makefile-am-and-makefile-in – Baltasarq

+0

感谢您的链接:D – stupidity

1

您可以方便地调用另一个程序 - 这将启动该程序的一个完全独立的副本。请参阅system()或exec()系列调用。

这在unix中很常见,那里有很多小程序需要输入文本流,执行某些操作并将输出写入下一个程序。使用这些,您可以排序或搜索一组数据,而无需编写更多代码。

在Windows上,很容易自动启动文件的默认应用程序,因此您可以编写PDF文件并启动用于查看PDF的默认应用程序。在Windows上更难的是控制一个单独的giu程序 - 除非程序故意写入允许远程控制(例如在Windows上使用com/ole),那么你无法控制用户在该程序中执行的任何操作。