Eclipse下C语言的Socket编程(Winsock,gcc)问题总结

2023-05-16

最近心血来潮想从新温习一下C语言(工作后一直用Java,其实大学时C语言课程也没好好上,正经的代码基本没写过,惭愧啊!),找了些小例子,修修改改,编译、运行、测试,很快也算上手了。IDE我用的是Eclipse(Java编程时一直都用习惯了,情有独钟),编译器用gcc,操作系统Win8;小程序有点玩腻了,今天想来个跨越,搞些有点实际意义的代码,就想到了Socket编程。毕竟网络编程还是很重要的(Java中快玩烂掉了,jdk的api很好用,比C语言容易),但是C语言网络编程这块我是一穷二白啊,所以呢就先百度了一下,找到很多例子,但是很多都有问题,主要有如下几种:

  • 操作系统问题
有些例程是Linux下的socket编程代码,一般文件头像这样:
#include <stdlib.h>  
#include <sys/types.h>  
#include <stdio.h>  
#include <sys/socket.h>  
#include <linux/in.h>  
#include <string.h>  
这个并不适合我目前的开发环境,C语言这点上也是比较麻烦,不像Java是跨平台的,你需要为不同的系统单独实现一个版本,java的native方法就是这么做的,只不过jdk帮我们做好了。
  • 编译器问题
有的例子是这样子的:
#include "stdafx.h"  
#include <stdio.h>  
#include <winsock2.h>  
#pragma comment(lib,"ws2_32.lib") 
一开始我用了,但发现编译不通过,"stdafx.h"  和#pragma 在gcc里根本就木有,原来这些都是vc的语法,这个也pass了。
  • ws2_32.lib问题
后来找了个纯C的:
#include<winsock2.h>
#include<stdio.h>
但是编译时报错了:
VARCHARserver.c:12: undefined reference to `WSAStartup@8'
VARCHARserver.c:17: undefined reference to `WSACleanup@0'
VARCHARserver.c:20: undefined reference to `socket@12'
VARCHARserver.c:22: undefined reference to `htonl@4'
VARCHARserver.c:24: undefined reference to `htons@4'
VARCHARserver.c:26: undefined reference to `bind@12'
VARCHARserver.c:30: undefined reference to `listen@8'
VARCHARserver.c:38: undefined reference to `accept@12'
VARCHARserver.c:49: undefined reference to `send@16'
VARCHARserver.c:55: undefined reference to `recv@16'
VARCHARserver.c:57: undefined reference to `closesocket@4'

查一些资料,大概意思就是,gcc缺少库“ws2_32.lib”,需要在编译时指定:
gcc prog.c -o prog.exe [...other .c and .o files...] -lws2_32 ...
使用-l选项,那么这个参数能否在eclipse中配置呢,我自己找了一下,是可以配置的:
点击工程属性-->C/C++ Bulid-->Settings-->Tool Settings-->MinGW C Linker-->Libraries ,在这里面添加wsock32。
搞定了,编译通过了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Eclipse下C语言的Socket编程(Winsock,gcc)问题总结 的相关文章

  • 将 Boost 库添加到 Windows Eclipse 中的 C++ 项目

    我最近使用安装程序在 Windows 上安装了 Boost 库 我试图链接到 Eclipse 中的库 但运气不佳 我尝试浏览 Project Properties gt C C Build gt Settings gt MinGW C Li
  • C99 中数组的静态大小[重复]

    这个问题在这里已经有答案了 一个非常简单的 C 程序 include
  • Java:同步标准输出和标准错误

    我有一个奇怪的问题 如果我能解决它就好了 出于调试目的 以及其他一些事情 我在标准输出上编写控制台 Java 应用程序的日志 有些内容写在标准输出上 有些内容 例如错误 打印在标准错误上 问题是这两者并不完全同步 因此打印行的顺序并不总是正
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • clang 是否提供类似于 GCC 6.x 的函数多版本控制 (target_clones) 的功能?

    我读了这篇 LWN 文章 https lwn net Articles 691932 饶有兴趣 执行摘要 GCC 6 x 支持所谓的函数多版本控制 它可以构建同一函数的多个版本 并针对不同的指令集进行优化 假设您有一台支持 AVX2 的机器
  • 无法加载 JNI 共享库 (JDK)

    当我尝试打开时Eclipse http www eclipse org 弹出对话框指出 无法加载 JNI 共享库 C JDK bin client jvm dll 此后 Eclipse 强制关闭 我想提出以下几点 我检查了这条路径上是否存在
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 如何在 Eclipse 中使用其他外部 jar 依赖项创建不可运行/不可执行的 jar

    我无法通过 Eclipse 导出向导创建普通的 jar 不可运行 不可执行 它仅创建 jar 文件 但不会导出依赖的 jar 从而在从其他类调用导出的 jar 的方法时出现错误 请帮助 非常感谢 kurellajunior的建议 它是通过使
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 为什么 gcc 链接时没有 lpthread 标志?

    我当时正在做一个业余爱好项目 其中互斥体的行为很神秘 我将其归结为这个显然应该陷入僵局的测试用例 include
  • GCC 5 及更高版本中的 AVX2 支持

    我编写了以下类 T 来加速操作 使用 AVX2 的 字符集 然后我发现它不起作用 gcc 5 及更高版本当我使用 O3 时 谁能帮我追踪到一些编程结构 已知不适用于最新的编译器 系统 该代码的工作原理 底层结构 bits 是一个 256 字
  • Maven依赖log4j错误

    大家好 我遇到错误 无缘无故地破坏了我的构建 这是错误消息 error error reading m2 repository com sun jdmk jmxtools 1 2 1 jmxtools 1 2 1 jar error in
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • 如何在 Windows 上的 Eclipse 中设置 Clang 工具链?

    我为一个愚蠢的问题道歉 但我在网上找不到答案 我正在努力为 64 位计算机上的 Windows 7 中的 Eclipse 设置 Clang 编译器 链接器 我对 C 的了解非常过时 并且从未在 Eclipse 中工作过 我想要实现的是在 W
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何在 Eclipse .classpath 文件中使用环境变量?

    在 Windows 中 我有一个环境变量 EXTERNAL LIB ROOT 指向 C Program Files MyExternalLibRoot 在另一台计算机上 它可能指向 C ExternalLibs 在 ant build xm

随机推荐