undefined reference to glut*WithExit之类的函数问题的原因及解决_烧饼兽的博客-程序员宅基地

技术标签: glut  opengl  

从百度空间

翻出来的文章,希望大家不会在这样的问题上,浪费很多时间。

undefined reference to glut*WithExit之类的函数问题的原因及解决

现象:

D:\CodeBlocks\MinGW\include\GL\freeglut_std.h|610|undefined reference to `[email protected]'|
obj\Debug\main.o||In function `glutCreateWindow_ATEXIT_HACK':|
D:\CodeBlocks\MinGW\include\GL\freeglut_std.h|612|undefined reference to `[email protected]'|
obj\Debug\main.o||In function `glutCreateMenu_ATEXIT_HACK':|
D:\CodeBlocks\MinGW\include\GL\freeglut_std.h|614|undefined reference to `[email protected]'|

原理:

/* Comment from glut.h of classic GLUT:

   Win32 has an annoying issue where there are multiple C run-time
   libraries (CRTs).  If the executable is linked with a different CRT
   from the GLUT DLL, the GLUT DLL will not share the same CRT static
   data seen by the executable.  In particular, atexit callbacks registered
   in the executable will not be called if GLUT calls its (different)
   exit routine).  GLUT is typically built with the
   "/MD" option (the CRT with multithreading DLL support), but the Visual
   C++ linker default is "/ML" (the single threaded CRT).

   One workaround to this issue is requiring users to always link with
   the same CRT as GLUT is compiled with.  That requires users supply a
   non-standard option.  GLUT 3.7 has its own built-in workaround where
   the executable's "exit" function pointer is covertly passed to GLUT.
   GLUT then calls the executable's exit function pointer to ensure that
   any "atexit" calls registered by the application are called if GLUT
   needs to exit.

   Note that the __glut*WithExit routines should NEVER be called directly.
   To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */

理解:

大致的意思是:win32有一个让人恼火的地方:同时存在多个C runtime库(CRT)。而编译好的GLUT.dll可能会连接到和编译GLUT.dll时用到的CRT不同的CRT,这样就会出现一些数据、函数之类不被调用的现象,尤其是atexit回调函数。为了应对这个问题,GLUT做了一个权宜之计或成变通处理(WorkAround),内建了一个exit函数指针,GLUT需要退出时,就内部调用这个函数。

这些glut*exit函数不应该直接被用户调用。所以说如果你发现了连接的时候,连接到了,就#define GLUT_DISABLE_ATEXIT_HACK,禁用这个workaround就行了。

 

但是我还是有些不理解:为什么能连接到了呢?连接的那些exit函数难道没有被实现?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuanshi5/article/details/9151725

智能推荐

毕业生信息管理系统_马振禹的博客-程序员宅基地

#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 100typedef struct //定义的用于表示毕业生信息{ char num[20]; //学号 char name[20]; //姓名 char sex[3];//性别 int age;//年龄 int classno;//班级 char major[20];//专业 char status[20];//就

认认真真推荐几个ATM大神的公众号_R语言中文社区的博客-程序员宅基地

今天给大家推荐几个不同技术领域的公众号,涉及服务端后台、前端、Python、职场等各领域。这些号的无论从文章质量,还是从留言互动上,都是值得大家关注的公号,相信大家一定能...

System.Diagnostics.Process执行获取程序实时输出消息_棉晗榜的博客-程序员宅基地

using System;namespace ConsoleAppNET5.TestVideoZhuanMa{ class Program { static void Main(string[] args) { var process = new System.Diagnostics.Process(); //应该触发退出事件 process.EnableRaisingEvents

delphi开发网页神器,安装unigui1.9_delphi unigui_lqen的博客-程序员宅基地

对于delphier来说,用delphi开发web程序,一直是一个很头痛的问题,在ui界面上要想漂亮,要学习css和美工知识,很多人都不得不放弃了。unigui是一个很好的框架,和delphier原生框架一样,拖放控件就能实现web开发支持的Delphi版本:Turbo Delphi Pro,Delphi 2006,Delphi 2007,Delphi 2009,Delphi 2010,Delphi XE,Delphi XE2,XE3,XE4,X5,XE6和XE7-XE8-XE10-10.1-10.2-1

UniAPP 安卓应用版本自动更新及下载安装_moTzxx的博客-程序员宅基地

近期进行 Uniapp 的开发过程,最后需要实现版本的自动检测和更新下载操作,特地在此进行文章的整理,以方便道友们减少前进道路上的坎坷,多谢指摘 …注: 本次指导,以更新 安卓应用为案例,ios、小程序等可举一反三,稍作优化!设计思路 1. 在服务端配置一个最新的应用版本号; 并将打包生成的 apk(安卓应用) 置于服务器,保证可成功访问的链接 2. 在前端 ...

EF批量操作数据之EntityFramework.Extended_ef 根据list 批量查数据_天马3798的博客-程序员宅基地

一 、EntityFramework.Extented整理Git源代码地址:https://github.com/loresoft/EntityFramework.Extended二 、使用 实例1.批量添加 数据 AddRange()发放,EF自带改方法TestOne _context = new DBA.TestOne();DateTime start = DateT

随便推点

Linux服务器配置之JDK安装篇[email protected]的博客-程序员宅基地

一、配置环境1、服务器:阿里云CentOS 7.2(64位)2、JDK版本:jdk-8u112-linux-x64.tar.gz3、服务器连接软件:Xshell 5二、安装步骤1、首先切换到root用户su root #切换到root用户,需要输入root用户的密码2、检查并卸载OpenJDK检查系统是否自带了OpenJDK以及相关安装包,如果有的话则应...

数据可视化 | Seaborn_DrugAI的博客-程序员宅基地

Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。 Python中的一个制图工具库,可以制作出吸引人的、信息量大的统计图 在Matplotlib上构建,支持...

springboot请求json内容不能含有富文本编辑器获取的html代码_逃学书童XO的博客-程序员宅基地

问题当我使用富文本编辑器nicEditor获取内容 存入json 上传到spring boot的后端的时候, 我发现我并不能获取html格式的代码解决方案当上传的时候我们使用htmlencode编码处理function htmlencode(html) { var temp = document.createElement ("div"); //2.然...

MySQL中的IFNULL和IF和ISNULL函数_bozi_list的博客-程序员宅基地

IFNULL(expr1,expr2):如果第一个参数不为空,则返回第一个参数,否则返回第二个参数。ISNULL(expr):判断是否是空,是空则返回1,否则返回0。IF(expr1,expr2,expr3):如果第一个表达式的值为TRUE(不为0或null),则返回第二个参数的值,否则返回第三个参数的值。  ...

poj 2356 Find a multiple[鸽巢原理]_creat2012的博客-程序员宅基地

题目链接:http://poj.org/problem?id=2356The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each of that numbers is not greater than 15000. This numbers are not necessarily diffe

【多视图几何】TUM 课程 第4章 同名点匹配_JungleTU的博客-程序员宅基地

课程第4章介绍了如何在两幅影像上匹配同名点,匹配同名点是计算影像相对姿态的第一步。用光流、特征点提取方法进行同名点匹配。

推荐文章

热门文章

相关标签