首页 > 解决方案 > bcc32 编译器和 tlink32 链接器选项在 linux 中分别等效于 gcc 和 ld

问题描述

我正在尝试将旧版 Delphi 代码从 Windows 转换为 Linux。Delphi 项目有一些子模块,它们用 C 语言编写并使用 bcc32 编译器编译并使用 tlink32 链接器链接。

作为这些 C 模块的 Linux 转换的一部分,我计划使用 gcc 编译器代替 bcc32,并使用 ld 链接器代替 tlink32。

但是,我发现在 Linux 中找到等效的编译器和链接器标志/选项有点困难。下面是来自 Windows 中现有 C 代码的编译器 (bcc32) 和链接器 (tlink32) 命令。如果有人可以建议 Linux 中 gcc 和 ld 的等效标志,那将是一个很大的帮助。

bcc32 编译器选项:

c:\bc45\bin\bcc32 -a1 -c -d -I..\..\_common\msgups -v- -w-aus -w-par -i50 -Dfar -DNO_SEGMENT_PRAGMA $(.SOURCE)

在这里我找不到对应于-a1, -d, -v-, -w-aus, -i50, -Dfar,的 gcc 编译器标志-DNO_SEGMENT_PRAGMA

tlink32 链接器选项:

c:\bc45\bin\tlink32 -s -n $(OBJ) $(.SOURCE), $@, $*.mup

在这里我找不到对应于-s和的 ld 编译器标志-n

标签: c++linuxgccc++builder

解决方案


bcc32 标志

基于:使用 Borland 5.5 编译器和命令行工具BCC32.EXE、C++ 32 位命令行编译器编译器错误和警告 (C++) 索引

  • -aN= 在 N 个字节上对齐
    • 因此,-a1是 1 字节对齐
  • -c= 仅编译,无链接
  • -d= 合并重复的字符串
  • -I= 包含文件目录
    • 因此,-I..\..\_common\msgups指向..\..\_common\msgups文件夹
  • -v= 源代码级调试
    • 因此,-v-禁用调试
  • -wxxx= 警告控制
    • 因此:
      • -w-aus抑制警告 #8004(“标识符”被分配了一个从未使用过的值)
      • -w-par抑制警告 #8057(从未使用参数“参数”)
  • -iN= 最大标识符长度
    • 因此,-i50最大标识符长度为 50
  • -Dxxx= 定义宏
    • 因此:
    • -Dfar定义far
    • -DNO_SEGMENT_PRAGMA定义NO_SEGMENT_PRAGMA

tlink32 标志

基于:LINK.EXE 和 TLINK32.EXE 的命令行选项

  • -s= 在 MAP 文件中包含有关段的详细信息。
  • -n= 没有默认库

推荐阅读