链接 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++ 文件的主要内容,如果未能解决你的问题,请参考以下文章

尽管链接到带有导​​出符号的 .lib 文件,但从托管 C++ 链接到非托管 C++ 时出现链接错误

C++程序文件链接

重复符号链接器错误(C++ 帮助)

C++创建和使用动态链接库

如何将 C++ 目标文件与 ld 链接

C 文件中的 C++ 文件中的链接器错误调用函数