简体   繁体   中英

complie dll but appear error LNK2019

I implement a C++ function as DLL with vs2013. But I have linker error (error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup) building to the dll. I have proper setup and not sure what is wrong. The code is very simple, but I don't know why it can't be built successfully.

Demoone.h

#ifndef _Demo_H_
#define _Demo_H_
#ifdef LIBDLL
#define LIBDLL extern "C" _declspec(dllimport)
#else
#define LIBDLL extern "C" _declspec(dllexport)
#endif
LIBDLL int Add(int plus1, int plus2);
#endif

Demoone.cpp

#include "Demoone.h"
int Add(int a, int b)
{
    return (a + b);
}

update:

I modified the header file as bellow

#ifndef _Demo_H_
#define _Demo_H_
extern "C" int Add (int a , int b);
#endif

and add an def file

LIBRARY "Dllmaketwo"
EXPORTS
Add @ 1

The same linker error (error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup) also appeared.

If you want to use load-time linking in the project that uses the DLL you need to link against the .lib produced by the DLL project build.

You can do that with:

#pragma comment(lib, "dllproject.lib")

Or by adding the .lib to the additional dependencies line in the project settings under Linker->Input. You may also need to mess with the library search path, either in the VC++ Directories page or in the Linker->General page.

#ifndef _Demo_H_
#define _Demo_H_
#ifdef LIBDLLIMPORT //Changed here
#define LIBDLL extern "C" _declspec(dllimport)
#else
#define LIBDLL extern "C" _declspec(dllexport)
#endif
LIBDLL int Add(int plus1, int plus2);
#endif

You should not use a same name in #ifdef and #define ,

Did you setup you project correctly? And you should not write a `main()' function in it.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM