编译器选项:-entry
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=CompilerOptentry
- 最后更新: 2021-10-12
覆盖隐式用户主函数的公开导出名称
语法
-entry <name>参数
name
覆盖隐式用户主函数公开导出名称的自定义名称
描述
-entry 编译器选项更改隐式用户主函数(由 fbc 自动生成为启动代码)的公开导出符号名称。
它影响启动代码和隐式用户主函数,这也受模块是否为主模块的影响。
默认情况下,fbc 在主模块中定义一个公开导出的 'main' 符号,以满足运行时启动系统代码的要求。
目前除了始终分开编译和链接之外,没有其他方法可以覆盖 fbc 对 'main' 符号的使用。
操作步骤:
- 自定义主函数名称必须仅使用以下签名声明(相同的参数类型、相同的返回类型、相同的调用约定),以便与(基本)主函数兼容:
vb
'' 在内部,隐式主函数现在命名为 "custom_main"
Declare Function custom_main CDecl Alias "custom_main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long- 还必须提供(基本)主函数以满足链接器和启动代码的需求。这可能在另一个库或框架、C、ASM 或 FB 语言中定义,如以下最小代码示例所示:
vb
Function main CDecl Alias "main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long
'' .....
'' 调用自定义主函数
Return custom_main( argc, argv )
End Function- 然后使用
-entry custom_main选项进行编译。
注意:
此功能正在开发中,将来可能会更改(参见文档论坛中的 Compiler Option: -entry)。
也许将有更好的方式来处理这个问题:一个让用户可以直接指定显式 "main" 的编译器选项。
示例
程序(option_entry.bas)示例,尝试仅展示 FB 语言的最小代码:
vb
'' option_entry.bas:
'' - 演示替代命名的主函数
'' 作为隐式用户主函数的替代入口点
'' - 我们也可以分开步骤编译和链接
'' 编译:$ fbc -c -m option_entry option_entry.bas -entry custom_main
'' 编译:$ fbc option_entry.o
'' 或者
'' 编译:$ fbc option_entry.bas -entry custom_main
'' 在内部,隐式主函数现在命名为 "custom_main"
Declare Function custom_main CDecl Alias "custom_main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long
'' 但我们仍然需要一个 main() 函数来满足链接器和启动代码
'' - 这可能在另一个库或框架中定义
'' - 目前没有,所以让我们在此处定义它来演示
Function main CDecl Alias "main" ( ByVal argc As Long, ByVal argv As ZString Ptr Ptr ) As Long
'' 只是调用我们的自定义主函数来演示
Return custom_main( argc, argv )
End Function
'' ---------------------------------
'' 用户隐式主函数的开始
'' 在内部这命名为 "custom_main",将自动被
'' 我们的自定义框架调用
Print "hello"
Sleep
'' 用户隐式主函数的结束
'' ---------------------------------版本
- 自 fbc 1.09.0 起
另请参阅
返回 目录