预编译( 生成 helloi 文件) 预编译的处理规则:1 将所有的 “#define” 删除,并展开所有的宏定义。 2 处理所有的条件
2 编译(生成汇编代码 hellos) 编译过程是编译器gcc把预处理完的文件进行词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。编译过程可以使用如下命令
3 汇编(生成helloo文件)汇编是 汇编器as
1 Cygwin
>
理论上说Linux系统编译的文件是不能在Windows系统上执行的,因为Windows系统没有Linux程序执行所依赖的so和a文件,so和a文件是Linux系统上的共享库文件,Windows系统上也没有Linux程序需要的系统调用(系统调用相当于Windows系统的API的概念),不同 *** 作系统的二进制文件是不能通用的。
但是现在情况有些不一样了,新版的Windows10提供了WSL(是Windows Subsystem for Linux的缩写),可以在Windows 10系统中运行Ubuntu、Fedora、SUSE Linux,其实就是个子系统,在子系统内可以运行Linux程序,主要是为了吸引Linux的开发者用户的。
不一定行。linux下有些类型的大小和在WINDOWS下不一样,比如long double,在WINDOWS下是8为,在linux下是12位,还有long,在WINDOWS下是4位,在linux下是8位。所以如果你在linux下定义了一个long的指针,然后让它指向下一个,那么它在WINDOWS下会移动过了头,也就是多移动了4位。而且linux下的动态库的后缀是so,在WINDOWS下是没法用的,linux下不能生成dll。
从根本上说Win32和Linux的可执行文件的格式不同
Win32的可执行文件是PE格式
而Linux的可执行文件通常是ELF格式
这样,在Linux下执行PE文件,Linux无法识别或是当作ELF来加载,当然无法运行
另外,Linux与Windows的库函数截然不同也是一个原因
根据这两个原因,linux下的wine就是让Linux识别PE格式并且提供WIN32所用的库函数(只是部分支持),因而可以用wine执行WIN32文件(效果不是很好)
打开腾讯电脑管家——工具箱——修复漏洞,进行漏洞扫描和修复。
建议设置开启自动修复漏洞功能,开启后,电脑管家可以在发现高危漏洞(仅包括高危漏洞,不包括其它漏洞)时,第一时间自动进行修复,无需用户参与,最大程度保证用户电脑安全。尤其适合老人、小孩或计算机初级水平用户使用。开启方式如下:进入电脑管家“修复漏洞”模块—“设置”,点击开启自动修复漏洞即可。
本质区别是这样的,linux下用的是伯克利socket,windows底下用的WinSocket
两者其实是大同小异的,不同的地方在以下几点:
1 头文件不同,在linux下用到的关键头文件<sys/socketh>
windows下用到的是 <Winsock2h>
2 socket的初始化不一样,在windows下要有一个WSAStartup,而linux 下没有。
3 具体的细节不一样,linux下的c和windows下的c的一些语法有些出入,你自己找找。
下面我把windows下的socket通讯的最基本的结构给你,你对照着修改就可以了,一下的程序我调试了一下,编译过了。
客户端
#include <Winsock2h>
#include <stdioh>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaDatawVersion ) != 1 ||
HIBYTE( wsaDatawVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrvsin_addrS_unS_addr=inet_addr("127001");
addrSrvsin_family=AF_INET;
addrSrvsin_port=htons(6000);
connect(sockClient,(SOCKADDR)&addrSrv,sizeof(SOCKADDR));
char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);
closesocket(sockClient);
WSACleanup();
}
服务器端
#include <Winsock2h>
#include <stdioh>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaDatawVersion ) != 1 ||
HIBYTE( wsaDatawVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrvsin_addrS_unS_addr=htonl(INADDR_ANY);
addrSrvsin_family=AF_INET;
addrSrvsin_port=htons(6000);
bind(sockSrv,(SOCKADDR)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf,"来自服务器端",
inet_ntoa(addrClientsin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);
}
}
以上就是关于一个编译生成的可执行程序是用什么命令执行全部的内容,包括:一个编译生成的可执行程序是用什么命令执行、如何在windows系统中使用linux的命令、linux系统下编译的文件在windows下能运行吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)