帮助理解Makefile.in中的导出 在Linux上的现有C++项目的MaFiFig中,它有: EXPORTS = \ gtkmozembed.h \ gtkmozembed_glue.cpp \ gtkmozembed_internal.h

帮助理解Makefile.in中的导出 在Linux上的现有C++项目的MaFiFig中,它有: EXPORTS = \ gtkmozembed.h \ gtkmozembed_glue.cpp \ gtkmozembed_internal.h,makefile,Makefile,你能告诉我出口是什么意思吗 谢谢。导出只是文件列表的名称。这可能意味着这些文件正在安装到其他人可以使用它们的位置。具有库用户不感兴趣的实现细节的头文件可以保持私有 导出中的.cpp文件可能意味着它包含用户必须编译并链接到其项目中的框架代码 您的示例来自Firefox。它的定义是: export:: $(EXPORTS) $(INSTALL) -m 444 $^ $(PUBLIC_EXPORT_DIR) 在Makefiles中复制或安装文件有点问题。请注意,副本和原件之间没有依赖关系。

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


谢谢。

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

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

您的示例来自Firefox。它的定义是:

export:: $(EXPORTS) 
    $(INSTALL) -m 444 $^ $(PUBLIC_EXPORT_DIR)
在Makefiles中复制或安装文件有点问题。请注意,副本和原件之间没有依赖关系。

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

第一个选项:
您可以声明库函数的一些接口(这样您的链接器就很高兴了;)。 例如:uu declspec(dllexport)int my_函数(char*)
在程序中完成导出对象的名称之后(链接器作业;)。。。但是 此对象的名称取决于语言、编译器等等

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

您可以看到,这个函数没有类型、形式参数等。当您包含这个库时,您没有关于函数的任何信息。

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

接下来,您可以加载该库:
第一个选项:uu declspec(dllimport)int my_函数(char*)

第二个:hmoduleloadlibrary(LPCSTR lpszLibName)

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


(很抱歉我的英语很差:/)

看看使用EXPORTS变量的地方。声明本身不足以理解发生了什么。这是来自Firefox(embedded/browser/gtk/src/Makefile.in)的,谢谢。但如果“在导出部分中是可以从库中导出的符号”,为什么在我的示例中,它有.h文件?