如何调用其他';在我的C语言项目中有一个开源本体项目

如何调用其他';在我的C语言项目中有一个开源本体项目,c,C,假设你有一个用C写的软件,比如说XYZ。软件XYZ是一种开源专有软件。 这样我就可以知道软件的来源了。我可以使用该软件,但不能修改XYZ的文件 假设我正在写自己的软件,比如说ABC。该软件使用XYZ提供的一些功能 现在,XYZ的源代码中有一个函数称为“static int get_val(int index)”。 我想使用函数get_val(),那么我应该怎么做 我应该如何调用函数 从XYZ构建共享库(DLL或.so)。可能已经有一个共享库可用。 将代码(即ABC)与XYZ链接,就可以开始在程序

假设你有一个用C写的软件,比如说XYZ。软件XYZ是一种开源专有软件。 这样我就可以知道软件的来源了。我可以使用该软件,但不能修改XYZ的文件

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

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

我应该如何调用函数

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

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

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

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

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

  • 如果XYZ项目是开源的

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

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

    描述同一项目的“开源”和“专有”是矛盾的。一个项目要么是,绝不是两者都是!确保XYS导出了方法get_val。在这种情况下,您可以将ABC与XYZ连接起来。