【发布时间】:2010-05-07 13:11:32
【问题描述】:
最近,我发现 Visual C++ 2008 编译器存在问题,但使用小技巧可以避免它。目前,我不能使用相同的 hack,但 2008 年和 2010 年一样存在问题(Express)。
所以,我为你准备了 2 个简单的 C 文件:一个用于 DLL,一个用于程序:
DLL(文件-dll.c):
#include <stdio.h>
__declspec(dllexport) void
print_to_stream (FILE *stream)
{
fprintf (stream, "OK!\n");
}
对于通过 file-dll.lib 链接此 DLL 的程序:
程序:
#include <stdio.h>
__declspec(dllimport) void print_to_stream (FILE *stream);
int
main (void)
{
print_to_stream (stdout);
return 0;
}
编译和链接DLL:
cl /LD file-dll.c
编译和链接程序:
cl file-test.c file-dll.lib
在调用 file-test.exe 时,我遇到了致命错误(类似于 UNIX 中的分段错误)。
正如我之前所说,我之前也遇到过同样的问题:关于将 FILE* 指针传输到 DLL。我想,这可能是因为编译器不匹配,但现在我对所有事情都使用一个编译器,这不是问题。 ;-(
我现在能做什么?
UPD: 我找到了解决方案:
cl /LD /MD file-dll.c
cl /MD file-test.c file-dll.lib
关键是链接到动态库,但是(我不知道)默认情况下它会静态链接并且(因此)发生错误(我明白为什么)。
附:感谢您的耐心。
【问题讨论】: