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)问题总结 的相关文章

  • JUnit Eclipse 显示 System.out.print() 的

    我正在使用 JUnit 3 和 Eclipse 3 4 当我运行 JUnit 测试用例时 一切正常并且测试完美完成 唯一的事情是我想查看我正在运行的类的输出 所有类都具有一些输出值的基本 System out print 因此 当我运行测试
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • gcc 不太可能使用宏

    我正在编写一段关键代码 其逻辑大致如下 if expression is true do something with extremely low latency before the nuke blows up This branch i
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 无法将 C 代码链接到 lapack / blas:未定义的引用

    我已经尝试了好几个小时了 这让我发疯 我得到的最后一个错误是 demo cblas c text 0x83 undefined reference to clapack sgetrf demo cblas c text 0xa3 undef
  • 如何在 Scala 中编写 Pig UDF

    我正在尝试在 Scala 中编写 Pig UDF 使用 Eclipse 我已将 pig jar 添加为 java 构建路径中的库 这似乎解决了以下 2 个导入问题 导入 org apache pig EvalFunc 导入 org apac
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • 在 Mac OSX 上将 JDK 7 或更高版本与 Android Studio 和 Eclipse 一起使用

    尽管已经安装了 JDK 8 Android Studio 和 Eclipse 都要求我安装 JDK 6 网上的几个解决方法告诉我更改 java home 以指向 JDK 8 安装位置 这样 usr libexec java home 和 j
  • 如何在 Java/Eclipse 中使用特殊字符

    如何在 Java Eclipse 中使用 显示 或 等字符 当我尝试直接使用它们时 例如在源代码中 Eclipse无法保存文件 我能做些什么 编辑 如何找到 unicode 转义序列 问题是您使用的字符无法以文件设置的编码 Cp1252 表
  • 透视切换面板在 Eclipse 中消失

    Eclipse 崩溃后 小透视切换窗格从 Eclipse 窗口的右上角消失了 我下载了最新版本并尝试打开它 使用相同的工作区 但按钮仍然消失 这是一个屏幕截图 并放大 有任何想法吗 我仍然可以通过选择 窗口 gt 打开透视图 来切换透视图
  • 'goto *foo' 其中 foo 不是指针。这是什么?

    我正在玩标签作为值 https gcc gnu org onlinedocs gcc Labels as Values html并最终得到这段代码 int foo 0 goto foo 我的 C C 经验告诉我 foo means dere
  • 无法在 Eclipse 中连接到虚拟机

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 当我尝试在 Eclipse 上调试任何项目时 我突然开始遇到这个奇怪的错误 我不记得有什么改变让这个问题突然出现 Launch
  • 以编程方式检查 .class 文件是否扩展特定类

    我有一个问题 我已经尝试解决好几个小时了 在 Eclipse 插件中 我有一个 ArrayList 其中包含一些 java class 文件的完整路径 作为字符串 我想做的是检查列表中包含的类是否扩展了特定的类 我考虑过解析该文件 查找 e
  • 在 Eclipse 插件中:如何以编程方式突出显示 java 编辑器中的代码行?

    我正在尝试开发一个 eclipse 插件 它对 java 代码进行一些文档检查 并在编辑器中突出显示一些代码行 为了实现我的目标 我不想在 eclipse 中创建新的编辑器 我只是想扩展默认的 java 编辑器以在不满足某些预定要求的方法下
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • 是否有用于封闭类型名称的简短版本的 Eclipse 模板变量

    我想在 Eclipse 中为 Java 类创建一个构造函数模板 我有一个适用于大多数课程的版本 尽管它不适用于嵌套在其他类中的类 见类Inner如下 如何获得类名的简短版本 模板不起作用 public newType enclosing t
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • Eclipse 中的 Java EE 视角

    我有标准版的 eclipse Galileo 现在我想在上面开发企业应用程序 知道如何获得 Java EE 视角吗 标准版如何安装Java EE工具 我有同样的问题 我首先使用 Ubuntu 软件中心安装了最新的 Eclipse 平台 In
  • 适用于 C/C++ 和 Java 的 Eclipse IDE

    我正在尝试在运行 El Capitan 的 Mac 上设置 Java IDE 但是我找到的安装程序要求我为 C C 和 Java 安装单独的 IDE Eclipse Neon Eclipse 有什么选项可以让我拥有一个支持多种语言的 IDE

随机推荐