静态库.导入和导出内联函数
Static libraries. Importing and exporting inline functions
这个问题是在我实现静态库时出现的。
我想检查我的猜测并获得信息在静态库中使用内联函数。
-
我的猜测是静态库的实现器不能导出其库中的内联函数
由于内联语句是由编译器实现(由编译器决定是否使该函数内联)通过放置低级命令表示操作在函数体中的代码段,使操作不会放在导出/导入和因此不能被链接器处理,因此不能由图书管理员所包含的代码将静态库应用到其中附呈。我的逻辑对吗? -
我猜作为内联导入函数是允许的,但我想知道它是如何实现的,因为它是编译器的但责任上的联动状态只有图书管理员,所以这意味着它必须采取一些行动,以使内联函数。
-
是的,内联函数通常放在头文件中,所以无论在哪里使用函数,编译器都可以直接看到函数体。这允许编译器评估是否在任何特定实例中为函数生成内联代码。
-
这基本上不会出现——"内联函数应该在每个使用它的翻译单元中定义。"(§3.2/3)。这意味着如果编译器要以内联方式生成函数,那么进入库的是包含该函数代码的内联扩展的目标代码。由于函数可能不会在每次使用时都进行内联扩展,因此库中通常也会有函数的定义,但该定义将像普通函数一样使用(至少主要是这样),而不是像内联扩展一样使用。
链接器也可以生成代码。无论一个函数在语言标准中是否是inline
函数,并且定义在与使用它的翻译单元相同或不同的翻译单元中,链接器都可以为它生成内联代码。
长话短说,就函数的代码是否内联生成而言,inline
关键字对典型的编译器几乎没有影响。主要的(如果不是唯一的)效果是它改变了单定义规则——内联意味着同一函数的多个(相同的)定义可以存在而不会产生问题。
你理解关键字inline
吗-你可以同样使用replace
内联函数允许编译时选择用实际代码替换函数调用——不需要导出/导入。它在头文件中定义。任何使用目标代码的代码都需要头代码,因此编译器将用实际代码替换函数调用。
在Visual c++中,您可以使用Microsoft特定的行为,并使用__declspec(dllexport) inline
或extern inline
导出/导入内联函数。请注意,这是微软特有的行为,如果你的目标不是Windows,并且完全不关心可移植性,你可以考虑一下。
- 是否可以将函数导入命名空间,但不能导出它?
- 使用导入的函数从嵌入式v8调用webassembly
- C ++ DLL导入:函数调用返回错误的结果
- 编译器如何知道 dll 导入的函数?
- 导入的库函数是否可以在内存中移动
- 在C++中导入 DLL 函数
- 我将类型库(.tlb)导入到Delphi中,但函数参数似乎不正确.我应该如何解决它
- 使用dllimport属性导入的函数参数
- 除了两个构造函数外,C++库导入也可以工作
- 宏导入外部函数
- 在C++中嵌入Python:在Python脚本中导入模块在一个函数调用过程中有效,但在另一个调用过程中无效
- 在另一个应用程序中嵌入python时,如何在子模块(即scipy.optimize.nnls)中导入或调用函数
- 我可以从C 中的库中包括/导入单个函数吗?
- 无法从导入的类 c++ 调用非静态成员函数
- 我对此C++函数的 C# DLL 导入进行封送处理有什么问题
- 我可以用错误的签名调用用dlsym()导入的函数,为什么
- 将C++函数导入为蓝图节点
- 将.cpp文件中的函数导入python
- 将c++函数导入teradata
- 用于将修饰的C++函数导入C++的GetProcAddress