我如何在我的C项目中调用其他开源propriotery项目的功能

时间:2011-09-22 09:05:37

标签: c

假设你有一个用C语言编写的软件说XYZ。 XYZ软件是一个开源专有软件。 所以我可以拥有该软件的来源。我可以使用该软件,但我无法修改XYZ的文件。

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

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

我该如何调用该函数?

3 个答案:

答案 0 :(得分:2)

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

当然,你可以,但这可能不是一个好主意。

有两种方法可以使用该功能:

  1. 通过删除static关键字并将其添加到api头文件,从模块中导出它。这当然涉及改变原始来源。
  2. #将文件包含在您自己的源文件中,从而有效地将其作为您自己的翻译单元的一部分。根据此文件可能具有的其他依赖项,这可能是也可能不是可行的选项。我会非常谨慎地这样做,但这是一个选择。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果XYZ项目是开源的

  • 将XYZ项目的源文件添加到您自己的文件中并一起编译
  • 如果您在XYZ项目中更改了某些内容,请考虑使用您的更改向项目的维护者发送消息:他们可能会喜欢您所做的并将其合并到将来的版本中

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