CodeBlocks新建GLUT 项目,测试程序出现 函数 undefined reference to ‘imp__glViewport’错误

本文介绍在CodeBlocks中配置OpenGL并创建GLUT工程时遇到的编译错误,通过添加宏定义#define_STDCALL_SUPPORTED成功解决,并提供修改后的代码示例。

codeBlocks配置好opengl 后新建一个 GLUT工程,会自动在main函数下生产一个测试程序。

如果出现编译错误,函数未定义

||=== Build: Debug in test3 (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `resize':|
undefined reference to `_imp__glViewport'|
undefined reference to `_imp__glMatrixMode'|
undefined reference to `_imp__glLoadIdentity'|
undefined reference to `_imp__glFrustum'|
undefined reference to `_imp__glMatrixMode'|
undefined reference to `_imp__glLoadIdentity'|
 

解决办法,在代码第一行,加上宏定义 #define _STDCALL_SUPPORTED,代码前几行如下图

#define _STDCALL_SUPPORTED
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif

#include <stdlib.h>

static int slices = 16;
static int stacks = 16;

/* GLUT callback Handlers */

static void resize(int width, int height)
{
    const float ar = (float) width / (float) height;

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity() ;
}

重新编译运行,结果如下图

 

<think>好的,我现在要解决用户在使用CodeBlocks 20.03进行32位编译时出现的“undefined reference to `inet_pton'”问题。根据用户提供的引用内容,我需要综合已有的信息和之前给出的解决方案来思考这个问题。 首先,用户之前的问题是关于“undefined reference to `inet_pton'”的,我的回答已经涉及到了头文件缺失和链接库的问题。现在用户补充了几个引用,我需要看看这些引用是否提供了新的信息。 引用[1]提到安装CodeBlocks的中文教程,以及解决编译器路径错误的问题,但用户当前的问题是关于链接错误,可能和编译器路径无关,但需要注意编译器是否正确安装。引用[2]提到类似的问题,即缺少lib库,特别是网络相关的函数,这和用户的问题相关,因为inet_pton属于网络函数。引用[3]指出在32位系统安装CodeBlocks时,不要下载带有mingw的版本,因为内置的mingw是为64位系统准备的,可能导致问题。这可能意味着用户使用的mingw版本不兼容32位,导致链接库缺失。引用[4]说明CodeBlocks依赖MinGW环境,需要正确配置。引用[5]提供了下载地址,可能需要确认用户是否下载了正确的32位版本。 用户现在的问题是在32位编译时出现该错误,所以需要检查以下几点: 1. 是否正确安装了适用于32位的MinGW?根据引用[3],用户应该下载不包含mingw的CodeBlocks版本,并单独安装32位的MinGW。如果用户安装了64位的MinGW,可能缺少32位的库,导致链接失败。 2. 是否在CodeBlocks中正确配置了32位的编译器?需要确保编译器设置为32位,并且路径正确。 3. 是否链接了正确的库?在Windows下,网络函数需要链接ws2_32库,这在之前的回答中提到过。用户可能需要检查链接器设置是否正确添加了-lws2_32。 4. 用户是否在代码中包含了正确的头文件?如arpa/inet.h在Windows下不可用,需要使用winsock2.h,并且通过预处理器指令来区分平台。 另外,根据引用[2]中的错误,类似的问题都是由于缺少ws2_32库的链接,所以需要确认用户是否在项目中正确添加了这个库。用户可能按照之前的步骤操作,但可能在32位环境下需要额外的配置,比如确保编译器选项包含-m32来生成32位代码,同时链接32位的库。 可能的解决步骤: - 确认MinGW是否为32位版本。如果用户下载的是CodeBlocks自带的MinGW(可能为64位),则需要卸载并安装32位的MinGW,或者在编译器设置中指定32位的工具链。 - 在CodeBlocks项目设置中,检查编译器是否设置为生成32位目标。可能需要添加-m32的编译选项,但需要注意MinGW是否支持该选项,或者是否有对应的32位库。 - 确保链接了ws2_32库,并且在链接器选项中正确添加了-lws2_32。 - 检查代码中的头文件是否包含正确,使用预编译指令来区分Windows和Linux。 此外,用户可能在32位系统上使用64位的MinGW,导致无法找到对应的库文件,从而出现链接错误。因此,安装正确的32位MinGW是关键。引用[3]提到不建议下载codeblocks-20.03mingw版本,因为其MinGW是针对64位的,所以用户应该单独安装32位的MinGW,并在CodeBlocks中配置使用该环境。 总结解决方案步骤: 1. 安装32位的MinGW,并配置CodeBlocks使用该编译器。 2. 在项目链接设置中添加ws2_32库。 3. 确保代码包含正确的头文件,并处理跨平台兼容性。 可能需要详细指导用户如何安装32位MinGW,并检查编译器设置是否正确。此外,确认项目构建选项中的编译器是否为32位,可能需要在编译器设置中添加-m32参数,或者选择正确的目标平台。</think>### CodeBlocks 20.03 32位编译下解决`undefined reference to inet_pton`的完整方案 #### 核心问题定位 该错误本质是**链接器无法找到`inet_pton`函数的实现**,结合引用内容[2][4]分析,主要原因有: 1. **MinGW环境不匹配**:32位系统未正确安装对应32位MinGW(引用[3]明确提示内置MinGW可能不兼容32位系统) 2. **网络库未链接**:未添加Windows网络编程必需的`ws2_32`库(引用[2]已证实) 3. **头文件缺失或平台不兼容**:未正确包含`winsock2.h`头文件(跨平台代码需适配) --- #### 分步解决方案 **第一步:安装正确的32位MinGW环境** 1. **卸载现有MinGW**(若已安装64位版本) 2. 下载32位MinGW: - 推荐从[MinGW官方仓库](https://sourceforge.net/projects/mingw/files/)选择`i686`架构的版本 3. 配置CodeBlocks编译器路径: ``` Settings → Compiler → Toolchain executables → 指定32位MinGW的bin目录 ``` **第二步:添加网络库链接(关键步骤)** 1. 右键工程 → `Build options...` 2. 在`Linker settings`选项卡添加: ```bash -lws2_32 # Windows网络编程必需库 ``` 3. **强制32位编译模式**(防止隐式调用64位库): ```bash -m32 # 在Compiler settings → Other options中添加 ``` **第三步:代码适配(跨平台支持)** ```c #ifdef _WIN32 #include <winsock2.h> #include <ws2tcpip.h> // Windows专用,包含inet_pton定义 #else #include <arpa/inet.h> #endif // 初始化Winsock(Windows必需) #if defined(_WIN32) WSADATA wsaData; WSAStartup(MAKEWORD(2,2), &wsaData); #endif ``` **第四步:验证编译命令** 最终编译命令应包含: ```bash gcc -m32 main.c -o output -lws2_32 ``` 若仍报错,检查MinGW的`lib`目录是否包含`libws2_32.a`(路径示例:`MinGW\i686-w64-mingw32\lib`) --- #### 补充说明 1. **安装包选择建议**(引用[3][5]): - 避免使用`codeblocks-20.03mingw`版本,单独安装CodeBlocks和32位MinGW - 推荐从[CodeBlocks官方下载页](https://www.codeblocks.org/downloads/)选择`codeblocks-20.03-nosetup.zip` + 独立MinGW 2. **环境变量检查**: - 确保`PATH`变量包含32位MinGW的`bin`目录(如:`C:\mingw32\bin`) --- #### 常见问题排查表 | 现象 | 解决方案 | |------|----------| | 报错`-m32 not recognized` | MinGW未安装32位开发包,需重装支持multilib的版本 | | `libws2_32.a`缺失 | 重新安装MinGW的`win32api`包 | | 运行时提示DLL缺失 | 将MinGW的`bin`目录下`libgcc_s_dw2-1.dll`复制到程序目录 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值