【发布时间】:2012-05-12 04:51:08
【问题描述】:
根据标题,我正在尝试使用 C 构建一个 DLL 并从 C++ 项目链接它。我在互联网上阅读并遵循了不同的教程,但每次都缺少一些东西,我不明白是什么。
这是我做的,一步一步:
我创建了一个新的 Win32 项目,命名为 testlib,然后,从向导中,我选择了“DLL”和“空项目”。
添加了标题:
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
添加了一个来源;因为我希望它是我阅读的 C 源代码,所以我应该简单地将 .cpp 文件重命名为 .c,所以
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
构建成功。
现在我想在另一个项目中使用我有用的 dll。
然后:新项目 (testlibUse)。这次我选择了“空项目”。
无需添加header,创建一个cpp源即可
//main.cpp
#include <testlib.h>
int main() {
hello();
}
然后:
我在属性->VC++目录->可执行目录中添加了
testlib.dll所在文件夹的路径我在属性->VC++目录->包含目录中添加了
testlib.h所在文件夹的路径我在属性->链接器->输入->附加依赖项中添加了
testlib.lib(包含扩展名)的路径
我尝试构建,但出现链接器错误:
LINK : C:\path\testlibUse\Debug\testlibUse.exe 未找到或不是由最后一个增量链接构建的;执行完整链接
main.obj:错误 LNK2019:函数 _main
中引用的未解析外部符号“void __cdecl hello(void)”(?hello@@YAXXZ) C:\path\testlibUse\Debug\testlibUse.exe : 致命错误 LNK1120: 1 unresolved externals
如果我回到testlib,在testlib.cpp 中重命名为testlib.c 并重新构建dll,那么我可以构建testlibUse,但在运行时出现“找不到dll”错误。
我还尝试在“发布”中更改两个项目的配置(根据需要更改路径),但没有任何改变。
很抱歉,这篇文章很长,但我认为有必要准确地写下我所做的。
有什么建议吗?
此外,如果我想在 Qt 项目中使用我的 dll,是否需要更改任何配置参数?
【问题讨论】: