这太令人沮丧了! 我不知道为什么会这样。 我有一个名为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正在正确连接,因为编译器不抱怨缺lessfunction“五”。 另外,当我把打印语句放在DLL代码中时,它们显示正常。 我做错了什么?
只是一个疯狂的猜测:
你似乎没有在weirdTest.c中声明five()的原型,这就是为什么编译器将该函数的返回类型视为int。 从int到double的结果转换混淆了你原来的double值。
使用dumpbin(windwos)或nm(linux)从DLL列出您的导出函数
并查看是否导出了五()