PRB: Can't Export from Static Libraries w/_declspec(dllexport)
ID: Q141459
|
The information in this article applies to:
-
The Microsoft Linker (Link.exe)
-
Microsoft Visual C++, 32-bit Editions, versions 2.0, 2.1, 2.2, 4.0, 5.0, 6.0
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.
Additional query words:
Keywords : kbcode kbtshoot kbVC200 kbVC210 kbVC220 kbVC400 kbVC500 kbVC600 LinkIss
Version : 2.0 2.1 2.2 4.0 5.0
Platform : NT WINDOWS
Issue type : kbprb