Version 5 (modified by guest, 13 years ago) (diff)

Fixups and additions by Dave Yeo

GCC on OS/2 supports several extra options. Most start with -Z. With the exception of -Zomf (others?) they are affecting the linking.

  • -Zcrtdll: link the C library dynamically
  • -Zdll: create a dynamic link library
  • -Zexe: create foo which is executable which calls foo.exe which is also created.
  • -Zhigh-mem: link so that the C library calls in the program make use of "high memory". This is similiar to specifying OBJ_ANY to OS/2 API memory calls. If you use this option you should include os2safe.h as the first include file in every C file that uses OS/2 APIs.
  • -Zlinker: pass option through to linker (like -Zlinker /EXEPACK:2 -Zlinker /PACKCODE)
  • -Zmap: tell linker or emxbind to create a .map file that contains the addresses of all symbols
  • -Zno-autoconv: switch off automatic conversion between a.out and OMF format when linking.
  • -Zautoconv: switch on automatic conversion between a.out and OMF format when linking.
  • -Zomf: compile and link using OMF format instead of a.out.
  • -Zargs-wild: call _wildcard() (see below) automatically on startup
  • -Zdll-search: Enables dlls as valid libraries. (default disabled)
  • -Zsym: Invoke mapsym.cmd on the mapfile to produce a .sym file. Requires -Zmap

These may not be OS/2 specific

  • -Bstatic, -non_shared, -dn, -static: Link with static libraries.
  • -Bshared, -call_shared, -dy: Link with shared libraries. (default)

These are mentioned in ReleaseNotes?.os2 but not sure what they do exactly:

  • -Zargs-resp: ??
  • -Zhigh-low: ??
  • -Zno-fork: turn off the fork() function?
  • -Zno-unix: non-unix like mode, affects slash handling and fork()?

These were supported options with EMX/gcc 2.8.x, not sure if they are still supported now:

  • -Zbin-files: open files in binary mode by default (still supported)
  • -Zbsd-signals: select the `BSD' signal processing model
  • -Zmt: multithread code (now default)
  • -Zmtd: multithread code, link C library dynamically
  • -Zmts: multithread code, link C library statically
  • -Zno-rte: create DLL without runtime environment
  • -Zsmall-conv: use small, fast, and inaccurate routines for converting decimal numbers to binary and vice versa
  • -Zstack: set the stack size
  • -Zso: create stand-alone DLL
  • -Zsys: create stand-alone OS/2 program (no emx.dll) - there's nothing similar for current libc, if you use new gcc with new libc, you always need the libcxxx.dll
  • -Zsysv-signals: select the `System V' signal processing model

There are also various environmental variables that affect the linker type. (from the output of emxomfld 0.6.3)

Environment variables:


The type of linker we're using. Values: WLINK, VAC365, VAC308, LINK386.

WLINK wlink.exe from Open Watcom v1.5 or later. VAC365 ilink.exe from IBM C and C++ Compilers for OS/2 v3.6 or later. VAC308 ilink.exe from Visual Age for C++ v3.08. LINK386 link386 form OS/2 install or DDK.


Name of the linker to use and optionally extra parameters. Spaces in the linker name or path is not supported. Quotes are not supported either.

The default values for these two variables are VAC365 and ilink.exe.


The type of resource compiler we're using. Values: RC,WRC.

RC rc.exe as shipped with OS/2 or found in the Toolkit WRC wrc.exe from Open Watcom v1.6 or later.


Name of the resource compiler to use and optionally extra parameters. Spaces or quotes in the name or path are not supported.

The default values for these two variables are RC and rc.exe. Finally, there are a couple of special functions which simplify porting of Unix programs:

  • _wildcard (int *argc, char ***argv): Same as in EMX, i.e. it expands it's arguments like a unix shell would do (but OS/2 cmd.exe doesn't), so you typically want to use this when porting a unix command line application. Instead of adding this to a program, compilation with -Zargs-wild can be used.