没有头文件的语言如何将符号从闭源库导出到客户端?
How do languages without header files export symbols from a closed-source library to clients?
头文件在C/C++/ObjC 中是必需的,因为每个文件在编译成目标文件之前都需要定义其所有符号。一个副作用是不想打开其源代码的库分发者可以仅向客户端提供头文件和要链接的 .o。 这在编译期间依赖源代码完整视图的语言中是否可行,例如 Java?对于这个用例,是否有任何其他语言具有有趣的解决方案?
提供一些背景信息:在我作为软件工程师的 (5y+) 经验中,我只使用过在 Java、Python 中我可以直接访问源代码的库和 Go,并且从未开发过闭源库。对于前两个,闭源开发人员可以发布字节码,但我看不出如何使用 Go 来做到这一点,Go 不依赖于头文件来转发声明符号。
Is this possible in languages that rely on a full view of the source code during compilation, like Java?
嗡嗡声。 Java 没有 'rely on a full view of the source code during compilation'。您不需要源代码来使用 Java JAR 文件,对吗?导出符号信息在 .class 文件中。将 JDK 的 rt.jar
视为最微不足道的示例。如果那行不通,什么都不会。而且你不需要源代码。
在 Modula、Ada 等中,它也以某种方式存在于目标代码中。
实际上只有 C 和 C++没有这个功能,因此必须依赖头文件。
头文件在C/C++/ObjC 中是必需的,因为每个文件在编译成目标文件之前都需要定义其所有符号。一个副作用是不想打开其源代码的库分发者可以仅向客户端提供头文件和要链接的 .o。 这在编译期间依赖源代码完整视图的语言中是否可行,例如 Java?对于这个用例,是否有任何其他语言具有有趣的解决方案?
提供一些背景信息:在我作为软件工程师的 (5y+) 经验中,我只使用过在 Java、Python 中我可以直接访问源代码的库和 Go,并且从未开发过闭源库。对于前两个,闭源开发人员可以发布字节码,但我看不出如何使用 Go 来做到这一点,Go 不依赖于头文件来转发声明符号。
Is this possible in languages that rely on a full view of the source code during compilation, like Java?
嗡嗡声。 Java 没有 'rely on a full view of the source code during compilation'。您不需要源代码来使用 Java JAR 文件,对吗?导出符号信息在 .class 文件中。将 JDK 的 rt.jar
视为最微不足道的示例。如果那行不通,什么都不会。而且你不需要源代码。
在 Modula、Ada 等中,它也以某种方式存在于目标代码中。
实际上只有 C 和 C++没有这个功能,因此必须依赖头文件。