使用Open Watcom编译16位Windows DLL

使用Open Watcom编译16位Windows DLL,dll,x86-16,watcom,Dll,X86 16,Watcom,我正试图为此编译一个16位Windows DLL 下面是我的绝对最小源文件: mydll.c int main (int reason) { return 0; } mydll.lnk FORMAT WINDOWS DLL LIBPATH .\openwatcom\lib286 LIBPATH .\openwatcom\lib286\win LIBRARY windows FILE mydll.obj NAME mydll 我建议他们使用以下两个命令编译和链接DLL # Build

我正试图为此编译一个16位Windows DLL

下面是我的绝对最小源文件:

mydll.c

int main (int reason) {
  return 0;
}
mydll.lnk

FORMAT WINDOWS DLL

LIBPATH .\openwatcom\lib286
LIBPATH .\openwatcom\lib286\win

LIBRARY windows

FILE mydll.obj
NAME mydll
我建议他们使用以下两个命令编译和链接DLL

# Build
openwatcom\binnt\wcc.exe -i='openwatcom\h;openwatcom\h\win' -bd -w4 -d2 -zu -bt=windows -fo=.obj -ml mydll.c

# Link
openwatcom\binnt\wlink.exe @mydll.lnk
但由于某些原因,链接步骤失败,并显示以下消息:

Error! E2028: __DLLstart_ is an undefined reference
Error! E2028: __fpmath is an undefined reference
creating a Windows dynamic link library
file clibl.lib(sigfpe.c): undefined symbol __fpmath

我的目标只是能够构建一个16位的DLL文件,最好是在Mac上使用wine,但我也有一个Windows XP虚拟机,所以这也是可以接受的。

DLL不是一个普通的可执行文件,因此它没有
主功能,因为没有真正的执行起点。我建议你在你最喜欢的搜索引擎中输入例如
DLLstart
,并对丢失的符号进行一些研究。是的,我也这么认为,但出于某种原因,它抱怨
错误!E2028:LIBMAIN是一个未定义的引用
缺失,直到我添加了一个只使用一个int作为参数的
main
函数。我认为这与加载DLL时调用的函数有关,但我不是100%确定……DLL不是正常的可执行文件,因此它没有
main
函数,因为没有真正的执行起点。我建议你在你最喜欢的搜索引擎中输入例如
DLLstart
,并对丢失的符号进行一些研究。是的,我也这么认为,但出于某种原因,它抱怨
错误!E2028:LIBMAIN是一个未定义的引用
缺失,直到我添加了一个只使用一个int作为参数的
main
函数。我认为这与加载DLL时调用的函数有关,但我不是100%确定。。。