如何在我的项目中调用其他开源项目的函数C

问题描述:

假设您有一个用C语言写成的软件,例如XYZ。软件XYZ是一个开源专有软件。 所以我可以有软件的来源。我可以使用该软件,但我无法修改XYZ的文件。如何在我的项目中调用其他开源项目的函数C

假设我写自己的软件说ABC。该软件使用XYZ提供的一些功能。

现在XYZ的源代码中有函数说“static int get_val(int index)”。 我想使用函数get_val(),那么我该怎么做?

我该如何调用函数?

+0

描述同一个项目的“开源”和“专有”是矛盾的。一个项目要么永远都不是! – pmg

+0

确保方法get_val由XYS导出。在这种情况下,您将ABC与XYZ接口。 – Sorantis

从XYZ构建共享库(DLL或.so)。有可能有一个共享库已经可用。 将您的代码(即ABC)与XYZ链接起来,您可以开始使用程序中由XYZ公开的功能。 所有开源软件都附带非常好的自述文件和说明,可帮助您使用该软件。从这些指南开始检查。

你不应该。静态关键字使函数在本地的翻译单元(源文件,或多或少),这意味着它不能从其他翻译单元调用。

那当然你可以,但它可能不是一个好主意。通过移除static关键字并将其添加到API头文件

  1. 出口从模块:

    有使可用的功能有两种方式。这当然会涉及改变原始来源。

  2. #将该文件包含到您自己的源文件中,从而有效地使其成为您自己的翻译单元的一部分。根据此文件可能具有的其他依赖关系,这可能是也可能不是可行的选项。我会非常小心这样做,但它是一个选项。

如果XYZ项目是开源

  • XYZ项目的源文件添加到您自己和编译一起
  • 如果更改XYZ项目中的东西,考虑发送消息给项目的维护人员:他们可能会喜欢你所做的并将其纳入未来版本

如果项目是专有的,那么您没有源代码。定义为static ...的函数在其他翻译单元中不可见,因此您根本不会调用它。