开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GUN GCC Compiler
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
没有
问题(Question):
在制作DLL的时候,如果我把function放在main.cpp时(如下面程式码中的AddInt())
可以正常编译,但是若放在其他档案时(如下面程式码中的AddExt())会编译失败。
我想应该是编译环境路径设定的问题,可是不清楚要改哪个部分,想问问看有没有人
有类似经验。
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
.\add.h // 我写的function header.
int AddExt(const int, const int);
.\add.c // 我写的function.
#include "add.h"
int AddExt(const int a, const int b) {
return (a+b);
}
.\main.h // Code::Blocks DLL 专案自动产生,我修改部分内容。
// 部分注解跟前置处理器忽略的部分我没贴上。
#ifndef __MAIN_H__
#define __MAIN_H__
#include "add.h" // 我增加的部分
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
int DLL_EXPORT SomeFunction(const int, const int);
#endif
.\main.cpp // Code::Blocks DLL 专案自动产生,我修改部分内容。
// 部分注解跟前置处理器忽略的部分我没贴上。
#include "main.h"
static int AddInt(const int a, const int b) {
return (a+b);
}
extern int AddExt(const int, const int);
int DLL_EXPORT SomeFunction(const int a, const int b)
{
//return (AddInt(a,b)); // OK
//return (a+b); // OK
return (AddExt(a,b)); // 编译不过,错误讯息如下。
}
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved) {
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
错误讯息:
obj\Release\main.o:main.cpp|| undefined reference to `AddExt(int, int)'
补充说明(Supplement):