繁体   English   中英

帮助了解Makefile.in中的EXPORTS

[英]Help in understanding EXPORTS in Makefile.in

在linux(ubuntu)上现有c ++项目的Makefile.in中,它具有以下内容:

EXPORTS     = \
        gtkmozembed.h \
        gtkmozembed_glue.cpp \
        gtkmozembed_internal.h

您能告诉我出口是什么意思吗?

谢谢。

EXPORTS只是文件列表的名称。 这可能意味着将这些文件安装到其他人可以使用它们的位置。 具有库用户不感兴趣的实现细节的头文件可以保留为私有。

EXPORTS中的.cpp文件可能意味着该文件包含用户必须编译并链接到其项目的框架代码。

您的示例来自Firefox。 定义为:

export:: $(EXPORTS) 
    $(INSTALL) -m 444 $^ $(PUBLIC_EXPORT_DIR)

在Makefiles中复制或安装文件有点问题。 请注意,副本与其原始副本之间没有依赖关系。

想象一下:
您是库(DLL)的设计师。 您必须定义必须执行的库...,然后编写它。 许多进程可以通过此DLL使用您的函数,您的RAM中有一块内存。
当将此库包含到项目中时(例如,在c ++中),您必须在此DLL中添加有关函数的一些信息。

第一种选择:
您可以声明一些库函数的接口(然后您的链接器很高兴;))。 例如:__declspec(dllexport)int my_function(char *);
之后,在程序中完成了导出对象的名称(链接器工作;))...但是该对象的名称取决于语言,编译器等等。

第二种选择:
您将一些信息添加到链接器的库项目中(文件* .def)。 该文件有两个部分:LIBRARY和SECTIONS。 LIBRARY是您的库的内部名称:
库my_lib
“导出”部分中的符号可以从库中导出。
出口
功能1
功能2
功能3

您会看到,此函数没有类型,形式参数等。当包含此lib时,您将没有有关函数的任何信息。

当您执行此操作(.def文件)并编译您的lib时,您将获得.dll和.lib文件。 第二个文件可以在执行时用来链接库。
如果要在此库中检查导出,可以使用“ Dependecny Walker”或“ dumpbin”:
dumpbin my.dll / exports

接下来,您可以加载该库:
第一个选项:__declspec(dllimport)int my_function(char *);
要么
第二个:HMODULE LoadLibrary(LPCSTR lpszLibName);

结论:使用导出可以创建更多的通用库(但更复杂)

(对不起,我的英语很差:/)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM