Triangle库在windows下崩溃的解决方法

使用 libigl 库,在linux下一切正常,而到了windows下编译运行后,发现每次运行到 Triangle 库部分的代码时就会出现内存错误崩溃,经过查找资料,发现是 Triangle 库的问题。

在windows下的vc中 long 是 32 位的 而在 Triangle 库中作者认为 long 是64 位的,解决方法是把 Triangle 库源代码中所有用到 long 的地方用 long long 替换。

重新编译后运行不再出错。

参考链接:https://stackoverflow.com/questions/44558793/triangle-library-with-vs2015-x64


欢迎关注我的公众号 江达小记

### 解决OpenGL `main` 函数不执行的原因及方案 #### 可能原因分析 1. **入口点错误** 如果编译器找不到程序的入口点,则可能导致 `main` 函数不会被调用。对于C/C++应用程序,默认情况下,编译器会寻找名为 `main` 的函数作为程序启动点[^1]。 2. **链接器设置不当** 链接阶段出现问题也可能阻止 `main` 函数被执行。例如,在某些平台上可能需要指定特定的子系统(如Windows下的控制台或GUI),如果配置有误则会影响程序正常加载和运行。 3. **初始化失败** 在使用像GLFW、SDL这类窗口管理时,如果没有成功创建窗口或其他必要的上下文环境,可能会导致后续代码无法继续执行,从而使得看似 `main` 函数未被执行实际上是因为提前退出了。 4. **异常抛出** 若在进入 `main` 之前发生了严重错误并触发了异常处理机制,那么同样会造成看起来像是跳过了整个 `main` 函数的情况发生。 5. **多线程问题** 对于涉及多线程的应用场景来说,主线程之外其他地方发生的致命性事件也有可能间接影响到 `main` 是否能够顺利到达其主体逻辑部分。 #### 实际案例解析与建议措施 针对上述提到的各种可能性,下面给出具体的排查方向: - 检查项目属性中的链接选项,确认已选择了适当的目标平台; - 使用调试工具逐步跟踪程序流,观察是否存在意外终止的地方; - 尝试简化初始版本只保留最基本的框架结构来验证能否正确显示窗口; - 查看是否有任何前置条件未能满足而引起的崩溃报告; - 审视所有依赖项是否都按预期工作,特别是第三方的状态。 通过以上步骤可以有效地定位具体是什么因素阻碍了 `main` 函数内代码片段的成功执行,并采取相应的修正行动以解决问题。 ```cpp // 示例:简单的 OpenGL 初始化流程 #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex2f(-0.5,-0.5); glVertex2f(0.5,0.0); glVertex2f(0.0,0.5); glEnd(); glutSwapBuffers(); } int main(int argc, char* argv[]) { // 注册回调函数前先确保 GLUT 已经初始化完成 glutInit(&argc, argv); // 设置显示模式 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); // 创建窗口 glutCreateWindow("Simple Triangle"); // 绑定绘制操作给当前窗口 glutDisplayFunc(display); // 开始消息循环等待用户交互 glutMainLoop(); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江达小记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值