链接 C++ 文件
Posted
技术标签:
【中文标题】链接 C++ 文件【英文标题】:Linking c++ files 【发布时间】:2011-03-09 21:59:23 【问题描述】:我有一个包含函数声明的头文件,我们称之为 A.h,我在文件 A1.cpp 中实现了这个函数。现在 A1.cpp 包含其他文件。并非 A1.cpp 中包含的所有文件都可用(第 3 方问题)。现在我的问题是,是否可以从文件调用函数,比如说 main.cpp,动态链接到 A1.cpp(不编译 A1.cpp),因为我有一些来自 3rd 方的文件不可用?
我的猜测是否定的,因为除非我包含可用的文件,否则我无法获得 A1.cpp 的目标文件,因此我无法调用函数。但是,如果我错了,请纠正我,A1.cpp 即 A1.o 的编译文件仍然可以使用,因为我可以链接到它,因此在不依赖其他包含文件的情况下进行函数调用(我没有?)
放轻松,我不是 C++ 人 :-) !!感谢您对此事的任何帮助或见解!哦,顺便说一句,我已经开始将 ndk 用于 android,因此麻烦:-)
【问题讨论】:
【参考方案1】:如果您有目标文件 (A.o
),为什么不能将其链接到二进制文件中?
g++ -o main main.o A.o
【讨论】:
链接到仅包含函数声明的 A.o 将如何获得 A1.cpp 中定义的函数定义?有没有可能,只是想知道......我想不是我能想到的...... 在编译A.o
时,有所有必要的源文件可用。因此,您将第三方封闭的东西作为预编译的二进制 blob 获得。这足以链接到。您可以使用明文A.h
的界面。应该管用。以这种形式获取商业库(静态库)很常见。不过,您可能还需要其他二进制 blob blahblah.o
来满足 A.o
的依赖关系。
Hmm .. 这实际上是有道理的,但是如果 blahblah.h 有其他依赖项作为其他包含的文件,我将需要所有其他依赖的二进制 blob,所以我想我正在寻找的答案是获取所有依赖项的二进制 blob(如果有的话),然后我可以成为快乐的人,否则我就是一只死鸭 :-)【参考方案2】:
如果我正确理解了您的问题,那么答案是否定的,而不是当目标只是一个 cpp 文件时。 在不编译的情况下链接到其他内容的唯一方法是将其放入 dll 或预编译库(Windows 中的 .lib)中。如果第三部分的东西在 .lib 或 dll 中,那么你应该很幸运,你只需要头文件,然后告诉你的编译器链接静态或动态库。 让我知道这是否有意义,如果没有,我可以澄清有关您的设置以及您尝试链接的内容的更多信息。
【讨论】:
好吧考虑这个文件 A.h void hello(); File A1.cpp #include "blahblah.cpp" // 我没有 blahblah.cpp #include "A.h" void hello() //something here file main.cpp #include "A.h" void main() hello( );现在我可以编译 main,因为我有 A.h 和 A1.cpp,所以我在 main 中包含了 A.h,我也可以在 main 中包含 A1.cpp,但问题是我没有 blahblah.h 可用。所以我试图通过动态链接到 A1.cpp 来解决它,但我的猜测是这是不可能的(我明白为什么不可能),所以如果我无法获得依赖项,拥有 A1.o 是唯一的补救措施A1.cpp ?以上是关于链接 C++ 文件的主要内容,如果未能解决你的问题,请参考以下文章