/Gy (Enable Function-Level Linking)


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at -Gy (Enable Function-Level Linking).

Allows the compiler to package individual functions in the form of packaged functions (COMDATs).


The linker requires that functions be packaged separately as COMDATs to exclude or order individual functions in a DLL or .exe file.

You can use the linker option /OPT (Optimizations) to exclude unreferenced packaged functions from the .exe file.

You can use the linker option /ORDER (Put Functions in Order) to include packaged functions in a specified order in the .exe file.

Inline functions are always packaged if they are instantiated as calls (which occurs, for example, if inlining is off or you take a function address). In addition, C++ member functions defined in the class declaration are automatically packaged; other functions are not, and selecting this option is required to compile them as packaged functions.

System_CAPS_ICON_note.jpg Note

The /ZI option, used for Edit and Continue, automatically sets the /Gy option.

To set this compiler option in the Visual Studio development environment

  1. Open the project's Property Pages dialog box. For details, see How to: Open Project Property Pages.

  2. Click the C/C++ folder.

  3. Click the Code Generation property page.

  4. Modify the Enable Function-Level Linking property.

To set this compiler option programmatically

Compiler Options
Setting Compiler Options