PRB: Can't Export from Static Libraries w/_declspec(dllexport)

Zavrnitev odgovornosti za umaknjeno vsebino KB

Ta članek govori o izdelkih, za katere Microsoft ne ponuja več podpore. Zato je ta članek na voljo »tak, kot je«, in ne bo več posodobljen.

Symptoms

When you build a DLL from component libraries (.lib files) that have functions declared with _declspec(dllexport) to export them from the DLL, the functions aren't exported or even included in the DLL. If you use the linker /warn option, the linker will display the LNK4005 warning to indicate that no .obj files were included from the static libraries.

Resolution

For the functions to be exported and included in the DLL, you must list the functions to be exported in a .def file, or use the linker /export option when building the DLL.

NOTE: This is only necessary when the functions are contained in .lib files that are used to build a DLL.

The following sample code illustrates this scenario, and shows how you can make sure the exported functions are included.

Sample Code

   /* Compile options needed: none
*/

/* EXPORT.C */

__declspec( dllexport ) void func()
{
}

@rem **** Buildit.bat

cl /MT /c export.c

@rem **** build static library

link /lib /out:static.lib export.obj

@rem **** build DLL

link /dll /machine:ix86 /warn /out:export.dll static.lib

@rem **** using the following link line instead of the previous one
@rem **** solves the problem: have to force a reference to func so it is
**** included

@rem link /dll /machine:ix86 /warn /export:func /out:export.dll
static.lib

dumpbin /exports export.dll

rem **** DUMPBIN should have reported func as exported

Status

This behavior is by design.
Lastnosti

ID članka: 141459 – Zadnji pregled: 1. dec. 2003 – Revizija: 1

Povratne informacije