使用Windows和C编译器在64位系统上运行32位C代码

时间:2019-06-20 21:05:28

标签: c linux mingw

我正在尝试使用64位MinGW编译器在Windows笔记本电脑上运行c代码。在代码的开头有几行指向其他文件,例如:

#include <openssl/e_os2.h>

编译代码时出现以下错误:

C:\MinGW\bin\openssl\apps>gcc s_server.c
s_server.c:21:27: fatal error: openssl/e_os2.h: No such file or directory
#include <openssl/e_os2.h>
                       ^
compilation terminated.

我确保文件位于正确的位置,但是仍然发生错误。我认为发生错误是因为我在64位系统上运行32位二进制文​​件。如果我没有Linux系统,是否有任何方法可以解决此问题?

1 个答案:

答案 0 :(得分:0)

C:\MinGW\bin\openssl\apps>gcc s_server.c
s_server.c:21:27: fatal error: openssl/e_os2.h: No such file or directory
#include <openssl/e_os2.h>
                       ^
compilation terminated.

我相信您在编译期间需要一个-I参数。标头 not 不在apps/目录中。相反,它们位于../include/(相对于apps/)。

也许是这样的编译命令:

# from apps/ directory
gcc -I ../include/ s_server.c

您可能会遇到其他问题,因为您需要链接到libssllibcrypto。请注意,您仍有工作要做。


这是Linux上的样子:

openssl$ find . -name e_os2.h
./include/openssl/e_os2.h

openssl$ cd apps

apps$ ls ../include/openssl/e_os2.h
../include/openssl/e_os2.h

由于相对路径为../include/openssl/e_os2.h,而源文件为#include "openssl/e_os2.h",因此只需使用../include包含-I


  

我正在64位系统上运行32位二进制文​​件...

您需要将OpenSSL构建为32位。运行./Configure LIST以获取MinGW目标的列表。然后,配置适当的三元组。

您可能需要在程序的命令行中添加-m32