这个答案是为了详细说明问题的根本原因。
程序崩溃的原因是链接了错误的运行时库。具体来说,您的示例被编译为单线程目标文件(默认),但链接步骤使用多线程 cw32mt.lib
运行时——末尾的“mt”后缀表示多线程。
解决方案是确保您的程序被编译为使用与您链接的运行时匹配的运行时。有几种方法可以做到这一点。
重要的 bcc32 编译开关:
-tW Windows GUI program. WinMain() is expected
-tWC Windows Console program. main() is expected. default.
-tWR Use dynamically linked runtime. Absence implies static runtime linkage.
-tWM Use multithreaded runtime. Absence implies single thread.
像这样将您的示例程序编译为单线程有效:
bcc32 -oexample.obj -c example.cpp
ilink32 -ap example.obj c0x32, example.exe,, cw32.lib import32.lib,,
或者您可以像这样将其编译为多线程(注意与-tWM
匹配的开关cw32mt.lib
):
bcc32 -tWM -oexample.obj -c example.cpp
ilink32 -ap example.obj c0x32, example.exe,, cw32mt.lib import32.lib,,
第三种更简单且不易出错的方法是不要自己调用链接器。相反,让编译器间接驱动链接器(类似于 gcc):
bcc32 -tWM -oexample.obj -c example.cpp
bcc32 -tWM example.obj -eexample.exe
对于您的简单示例,它甚至可以缩短为:
bcc32 -eexample.exe 示例.cpp
最后,您可以-tW
多次通过开关。例如,此命令将您的示例编译为具有多线程支持和动态运行时链接的控制台程序:
bcc32 -tWM -tWR -tWC -eexample.exe 示例.cpp
生成的example.exe
可执行文件要小得多,它的导入表有一个条目用于CC3250MT.DLL
确认 borland 运行时是动态链接的。
我们不应该假设一个无法运行的程序是由不符合标准或我们正在使用的工具中的错误引起的,而不首先调查用户错误作为潜在原因(即使在这种情况下很容易这样做)。在 OP 的情况下,code::block IDE 没有为正在使用的工具链设置正确的命令。