这太令人沮丧了!我不知道为什么会这样。我有一个名为 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链接时,weirdTest中的代码将无错误地退出。我正在使用 gcc(cygwin)在 64位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正在正确链接,因为编译器不会抱怨缺少函数“five”。另外,当我在DLL代码中放置print语句时,它们显示正常。我做错了什么?
答案 0 :(得分:5)
只是猜测:
您似乎没有在weirdTest.c中为five()声明原型,这就是编译器将该函数的返回类型视为int的原因。从int到double的结果转换会使您的原始双值变大。
答案 1 :(得分:0)
使用dumpbin(windwos)或nm(linux)列出DLL中的导出函数
并查看是否导出了five()