动态库不使用visual studio 2012生成lib文件

时间:2013-04-25 08:41:48

标签: c++ window

我正在使用Visual Studio 2012而我在不使用MFC的情况下创建了dll,它生成了dll。但是当我指定使用以下选项在特定目录中生成lib文件时: - 转到proeperties页面 - > Advanced->导入库 ../../../ LIB / myapp.lib

它不是在指定文件夹中生成lib文件。请帮帮我。

谢谢&问候 维卡斯

3 个答案:

答案 0 :(得分:2)

刚刚解决了类似的问题。 Visual Studio不会在不指示在dll中公开哪些对象的情况下创建.lib文件。您需要创建一个win exports头,如下所示:

#ifndef BLABLABLA
#define BLABLABLA

#ifdef MYAPPLIB_EXPORTS
#define MYAPPLIB_API __declspec(dllexport)
#elif defined(MYAPPLIB_EXPORTS_STATIC)
#define MYAPPLIB_API 
#else
#define MYAPPLIB_API __declspec(dllimport)
#endif 

#endif // !BLABLABLA

然后,您需要将MYAPPLIB_EXPORTS声明为预处理器宏。将此新头文件包含在其他API标头中后,对于要在API中公开的每个类或方法,可以将MYAPPLIB_API添加到其声明中,如:

class MYAPPLIB_API MyClass{ ... };

答案 1 :(得分:0)

请参阅以下内容:您可能需要声明/ EXPORTS(http://msdn.microsoft.com/en-us/library/7k30y2k5.aspx

http://msdn.microsoft.com/en-us/library/67wc07b9.aspx请参阅“备注”

答案 2 :(得分:0)

    calculatelibrary.h

/ * 默认情况下,DLL的“新建项目”模板会将PROJECTNAME_EXPORTS添加到DLL项目的已定义预处理器符号中。  在此示例中,在构建calculateLibrary DLL项目时定义CALCULATELIBRARY_EXPORTS。  定义CALCULATELIBRARY_EXPORTS符号时,CALCULATELIBRARY_API符号在此代码中的成员函数声明上设置__declspec(dllexport)修饰符。  此修饰符告诉编译器和链接器从DLL导出函数或变量,以便其他应用程序可以使用它。  当CALCULATELIBRARY_EXPORTS未定义时 - 例如,当客户端应用程序包含头文件时 - CALCULATELIBRARY_API在成员函数声明上定义__declspec(dllimport)修饰符。此修饰符可优化应用程序中函数的导入。有关详细信息enter image description here

* /

    #ifndef _calculate_library_h
    #define _calculate_library_h

    #ifdef CALCULATELIBRARY_EXPORTS
    #define CALCULATELIBRARY_API _declspec(dllexport)
    #else
    #define CALCULATELIBRARY_API _declspec(dllimport)
    #endif



    namespace calculatelibrary
    {
          class CALCULATELIBRARY_API clsCalculateLibrary{

               // Returns a + b  
              double  Add(double a, double b);  
        };
    }
    #endif _calculate_library_h

    // CalculateLibrary.cpp : Defines the exported functions for the DLL application.
    //

    #include "stdafx.h"
    #include "CalculateLibrary.h"


    namespace calculatelibrary
    {

            double clsCalculateLibrary::Add(double a, double b)  
        {  
            return a + b;  
        }  

    }