【发布时间】:2012-04-05 17:52:51
【问题描述】:
这太令人沮丧了!我不知道为什么会这样。我有一个名为 weirdDLL.c 的文件:
double five() {
return 5.0;
}
我还有一个名为 weirdTest.c
的文件#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
double f = five();
if (f != 5.0) {
printf("Test failed with %f", f);
return 1;
}
return 0;
}
我希望,当编译并与 DLL 链接时,怪异测试中的代码将退出而不会出错。我正在使用 gcc (cygwin) 和命令在 64bit Windows 7 上进行编译:
gcc -c weirdDLL.c
gcc -shared -o weirdDLL.dll weirdDLL.o
gcc -o test weirdtest.c -L./ -l weirdDLL
./test
输出是:
Test failed with 0.000000
看起来 DLL 链接正确,因为编译器没有抱怨缺少函数“五”。此外,当我将打印语句放入 DLL 代码中时,它们显示得很好。我做错了什么?
【问题讨论】:
-
见stackoverflow.com/questions/9780930/… 你有同样的问题 - 你需要在
main()调用它之前有一个函数five()的声明/原型,这样编译器就知道它不会返回一个int. -
@Michael Burr:是的问题,谢谢! DLL 是一条红鲱鱼。但是为什么编译器需要一个 int 呢?函数原型在 DLL 代码中可用,我还将返回值分配给 double。