2011-03-09 78 views
0

我有一个包含函数声明的头文件,我们称之为A.h,我在文件A1.cpp中实现了这个函数。现在A1.cpp有其他文件包含。并非所有包含在A1.cpp中的文件都可用(第三方问题)。现在我的问题是,是否有可能从一个文件进行函数调用让我们说main.cpp,动态链接到A1.cpp(没有编译A1.cpp),因为我有一些来自第三方的文件不可用?链接C++文件

我的猜测是否定的,因为除非我包含可用的文件,否则我无法获得A1.cpp的对象文件,因此我无法调用函数。然而纠正我,如果我错了,一个编译文件的A1.cpp ie A1.o仍然可以使用,因为我可以链接到它,因此使函数调用不依赖于其他包含文件(我没有?)

对我来说很容易,我不是一个C++的家伙:-)!任何帮助或在这个问题的见解表示赞赏!哦,顺便说一句,我已经开始使用ndk的机器人,因此麻烦:-)

回答

1

如果你有目标文件(A.o),为什么你不能把它链接到你的二进制文件?

g++ -o main main.o A.o 
+0

如何链接到只包含函数声明的A.o将获得A1.cpp中定义的函数定义?这是甚至可能的,只是想知道...我猜不是我所能想到的.. – GodOnScooter 2011-03-09 22:33:33

+1

在编译'A.o'时,有所有必需的源文件可用。所以,你将第三方关闭的东西当作预编译的二进制blob。这足以链接到。您可以使用的接口为明文“A.h”。应该管用。以这种形式获得商业图书馆很常见(静态图书馆)。 虽然你也需要其他二进制blob'blahblah.o'来满足'A.o'的依赖关系。 – 2011-03-09 22:39:54

+0

嗯..这实际上是有道理的,但如果blahblah.h有其他依赖项作为其他包含的文件,我会需要所有其他相关的二进制blob,所以我想我要找的答案是获取所有依赖项的二进制blob如果有的话),然后我可以成为快乐的男人,否则我是死鸭子:-) – GodOnScooter 2011-03-09 22:50:39

0

如果我已经理解你的问题,那么答案是否定的,而不是当目标只是一个cpp文件。 链接到别的东西而不编译它的唯一方法是将它放在一个dll或预编译的库(windows中的.lib)。如果第三部分内容在.lib或dll中,那么您应该很幸运,您只需要头文件,然后告诉编译器链接静态或动态库。 让我知道,如果这是有道理的,如果不是,我可以澄清更多关于你的设置和你想链接的信息。

+0

好的考虑这个 文件A.h void hello(); 文件A1.cpp 的#include “blahblah.cpp” //我没有blahblah.cpp 的#include “啊” 无效你好(){// 的东西在这里 } 文件main.cpp中 #include“啊” void main(){ hello(); } 现在我可以编译主要,因为我有A.h和A1.cpp,所以我包括在主要A.h,我可以在主要包括A1.cpp,但问题是我没有blahblah.h可用。所以我试图通过动态链接到A1.cpp,但我的猜测是不可能的(我明白为什么这是不可能的),所以有A1.o是唯一的补救措施,以防止我无法获得依赖关系A1.cpp? – GodOnScooter 2011-03-09 22:31:17