C_and_CPP 板


LINE

开发平台(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): --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.132.98.137
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1493210103.A.788.html
1F:推 Sidney0503: win10上喔......建议换VS呵呵 04/26 21:15
2F:推 Sidney0503: 据我所知 并不需要extern 只要设好linker就可以抓到 04/26 21:18
只要把#include "add.h"换个地方,问题就非常神奇的解决了。 .\main.h // Code::Blocks DLL 专案自动产生,我修改部分内容。 // 部分注解跟前置处理器忽略的部分我没贴上。 #ifndef __MAIN_H__ #define __MAIN_H__ #include <windows.h> #define DLL_EXPORT __declspec(dllexport) #include "add.h" // 改放在这里就能编译过了。 int DLL_EXPORT SomeFunction(const int, const int); #endif 放在这两个地方感觉上应该没有什麽不同,毕竟两者之间只差了一个#define语句, 我也搞不太懂为什麽,留给高手解答吧。 VS商业使用要钱的Orz ※ 编辑: icetofux (220.132.98.137), 04/26/2017 21:28:10
3F:→ pttworld: extern "C" int AddExt .... 然後不需要add.h 04/26 23:49
4F:推 LPH66: 我怎麽觉得这是你单纯没把 add.o 给连结起来的关系... 04/26 23:58
5F:→ LPH66: 你有把 add.c 加进专案里面去吗? 04/26 23:59
6F:→ pttworld: 错误讯息告知走C rule了。 04/27 00:02
7F:→ icetofux: 有喔 我有确认所有档案有加进专案了 04/27 01:06
8F:→ icetofux: 请问从哪里可以看出走c rule呢 04/27 01:08
9F:→ pttworld: google extern 用法,extern "C" 04/27 05:43
10F:→ icetofux: 喔,我知道extern "C"的用途,我以为你说的错误讯息 04/27 09:22
11F:→ icetofux: 是编译器输出有提到。谢谢。 04/27 09:23
12F:推 kwpn: 用extern "C" 或是把add.c改成add.cpp 04/27 19:20
13F:→ LPH66: 其实算有喔, 因为 C linkage 和 C++ linkage 连结器看到的 04/27 20:55
14F:→ LPH66: 名字 mangling 的方式是不一样的 (这也是 extern "C" 实际 04/27 20:55
15F:→ LPH66: 上所做的手脚) 你所给的连结器错误讯息表示它找不到 C++ 版 04/27 20:55
16F:→ LPH66: 的函数, 这就表示你这函数在 main.o 里是 C++ linkage 04/27 20:56
17F:→ LPH66: (之所以知道是 C++ 版是因为它写出了参数型态) 04/27 20:57







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP