小编Wil*_*ver的帖子

在Mac上汇编和在linux上汇编有什么区别?

我一直在尝试熟悉mac上的汇编,从我所知道的,文档非常稀疏,大多数关于这个主题的书都是针对windows或linux的.我以为我可以很容易地从linux转换到mac,但这个(linux)

.file   "simple.c"
.text
.globl simple
.type   simple, @function
simple:
      pushl   %ebp
      movl    %esp, %ebp
      movl    8(%ebp), %edx
      movl    12(%ebp), %eax
      addl    (%edx), %eax
      movl    %eax, (%edx)
      popl    %ebp
      ret
.size   simple, .-simple
.ident  "GCC: (Ubuntu 4.3.2-1ubuntu11) 4.3.2"
.section        .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)

看起来与此非常不同(mac)

.section    __TEXT,__text,regular,pure_instructions
.globl  _simple
.align  4, 0x90
_simple:                                ## @simple
    .cfi_startproc
## BB#0:
pushq   %rbp
Ltmp2:
    .cfi_def_cfa_offset 16
Ltmp3:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
Ltmp4:
    .cfi_def_cfa_register %rbp
    addl    (%rdi), %esi
    movl    %esi, (%rdi)
    movl    %esi, %eax
    popq    %rbp …
Run Code Online (Sandbox Code Playgroud)

macos x86 assembly gcc x86-64

14
推荐指数
1
解决办法
3697
查看次数

为什么QGLWidget只呈现空白屏幕?

我以前在SDL中使用过OpenGL,但我刚开始学习QT.在QT中,使用OpenGL证明有点痛苦.我有以下两个文件:

main.cpp中

#include <stdio.h>
#include <QApplication>
#include "glwidget.hpp"
#include <QGLFormat>

int main(int args, char *argv[]) {
    QApplication app(args, argv);

    GLWidget openGLWidget;
    openGLWidget.show();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

glwidget.hpp

#include <GL/glew.h>
#include <QGLWidget>
class GLWidget : public QGLWidget {
    protected:
        void initializeGL();
        void paintGL();
};

void GLWidget::initializeGL() {
    if(glewInit() != GLEW_OK) {
        fprintf(stderr, "GLEW failed to initialize.");
    }   
}
void GLWidget::paintGL() {
    glClearColor(1, 0, 0, 1); 
    glClear(GL_COLOR_BUFFER_BIT);
    QGLWidget::swapBuffers();
}
Run Code Online (Sandbox Code Playgroud)

helloworld.pro

TEMPLATE = app 
INCLUDEPATH += .
LIBS += -lGL -lGLEW

# Input
SOURCES …
Run Code Online (Sandbox Code Playgroud)

c++ opengl ubuntu qt qglwidget

14
推荐指数
1
解决办法
3842
查看次数

SDL错误架构x86_64"_SDL_main"的未定义符号

我在我的mac os x上使用C++和SDL Cocoa和Foundation框架.我收到以下错误

Undefined symbols for architecture x86_64:
  "_SDL_main", referenced from:
      -[SDLMain applicationDidFinishLaunching:] in SDLMain.o
ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

当我运行以下代码时

#import <Foundation/Foundation.h>
#import <SDL/SDL.h>
#include "SDLMain.h"
int main(int argc, const char * argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_SetVideoMode(640,480,32,SDL_DOUBLEBUF);
    SDL_Event event;
    bool isRunning = true;
    while(SDL_PollEvent(&event)){
        if(event.type == SDL_QUIT){
            isRunning=false;
        }
    }

    SDL_Quit();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题,虽然看起来当我进入SDLMain.m文件并注释掉这行代码

status = SDL_main (gArgc, gArgv);
Run Code Online (Sandbox Code Playgroud)

程序编译没有问题.但是,它不起作用.没有窗口像它应该的那样打开.有任何想法吗?

c++ macos xcode cocoa sdl

11
推荐指数
1
解决办法
7861
查看次数

例如,在C中定义变量时,存储该变量的内存地址在哪里?

如果我在C中定义一个变量(即unsigned short int n = 5),那么该值将以二进制形式存储在用户RAM的某处(在这种情况下,它看起来像0000 0000 0000 0101).存储该值的位置具有也是二进制的地址.(即,值5可以存储在例如0010处,这意味着它在RAM中使用0010和0011,因为它使用2个字节).变量n的名称表示存储该值的内存地址.存储的内存地址在哪里?那会不会占用更多的公羊?如果确实如此,那么该地址也不必有地址吗?

c memory binary ram computer-science

9
推荐指数
1
解决办法
1006
查看次数

如何在PHP中创建websockets服务器?

我一直在互联网上搜索大约两天,试图了解网络套接字是如何工作的,我在Javascript和PHP方面相对较新,看到我在两三个月前开始.

我对Http协议是什么以及如何与我正在阅读的服务器执行"握手"非常困惑.所以不幸的是,我很难提出比标题中更具体的问题.

但是,甚至比标题中的问题答案还要多,我真的很想要一个能够以彻底的方式教我网络套接字的资源,比如书籍或在线教程.

任何帮助表示赞赏,谢谢.

javascript php server-side websocket http-protocols

7
推荐指数
1
解决办法
1万
查看次数

这个汇编函数prologue/epilogue代码用rbp/rsp/leave做什么?

我刚刚开始使用GCC编译器来学习汇编我的代码.不幸的是,如果你是初学者,有非常有限的资源来学习如何做到这一点.我终于设法找到了一些简单的示例代码,我可以开始说清楚了,我得到它来组装并正确运行.这是代码:

.text                                           # start of code indicator.
.globl _main                                    # make the main function visible to the outside.
_main:                                          # actually label this spot as the start of our main function.
    push    %rbp                            # save the base pointer to the stack.
    mov     %rsp, %rbp                      # put the previous stack pointer into the base pointer.
    subl    $8, %esp                        # Balance the stack onto a 16-byte boundary.
    movl    $0, %eax                        # Stuff 0 into EAX, which is where result values go.
    leave …
Run Code Online (Sandbox Code Playgroud)

macos assembly stack gcc x86-64

6
推荐指数
1
解决办法
4333
查看次数

强制转换由通用实例类型的 getClass() 返回的类在 Java 中总是安全的吗?

我不知道如何用简洁的方式来表达这个问题的标题。我发现了一些相关的问题,例如这个,但似乎没有一个能明确回答我提出的问题。

但基本上我要问的是:

考虑以下代码


static <A, B> Class<? extends A> getLeftClass(Pair<A, B> tuple) {
   A left = tuple.getLeft();
   return left.getClass();
}
Run Code Online (Sandbox Code Playgroud)

按原样,此代码无法编译。编译失败并出现错误 Type mismatch: cannot convert from Class<capture#20-of ? extends Object> to Class<? extends A>

我认为这本质上是因为getClass返回一个类型,Class<? extends Object>但编译器期望Class<? extends A>.

一种解决方案是将类转换如下:


static <A, B> Class<? extends A> getLeftClass(Pair<A, B> tuple) {
   A left = tuple.getLeft();
   return (Class<? extends A>) left.getClass();
}
Run Code Online (Sandbox Code Playgroud)

这编译。但是,由于未经检查的强制转换,会出现警告。

我的问题是,警告是否合理?有正当理由不这样做吗?或者这只是编译器无法验证它是否正确的情况,但只要tuple.getLeft()它确实是 的实例,它就会始终工作A


顺便说一下,这个Pair类是 …

java generics casting type-erasure

6
推荐指数
1
解决办法
90
查看次数

在Xcode上用C++创建文件

这应该在我的项目目录中创建一个名为"tuna.txt"的文件.当我运行它时,它成功编译,但是没有创建文件.我在使用xcode的mac上.我已经在我的计算机上搜索了可能已经创建的其他地方,但似乎文件根本就没有创建.关于它为什么不起作用的任何想法?

#include <iostream>
#include <fstream>
using namespace std;
int main(void){
    ofstream file;
    file.open("tuna.txt");

    file << "I love tuna and tuna loves me!\n";
    file.close();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ macos xcode file

5
推荐指数
1
解决办法
1万
查看次数

使用C++在Mac OS X上创建应用程序?(没有Cocoa)

似乎在Xcode 4中,不再有办法创建一个不限于使用C或C++的命令行的应用程序.我想这样做,但Glut似乎是可用于与C++和OpenGL一起工作的mac的唯一框架之一,但是gluts功能开始停止在现代操作系统上工作.还有其他替代方案可以让我在Mac上使用C++或C进行软件开发吗?它不必限于使用xcode或opengl.

c c++ opengl macos xcode

3
推荐指数
1
解决办法
3887
查看次数

为什么cd命令在xiki中不能用于sublime text 2?

在xiki for sublime中我运行这一行

$cd /Users/my_name
Run Code Online (Sandbox Code Playgroud)

没有错误或任何出现.但是当我运行此命令时

$pwd
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出

/Users/my_name/Library/Application Support/Sublime Text 2/Packages
Run Code Online (Sandbox Code Playgroud)

它似乎应该在我的主目录中.为什么这不起作用?

command-line cd sublimetext2 xiki

3
推荐指数
1
解决办法
443
查看次数

bash中的参数太多错误

我正在编写一个脚本来删除目录中的所有文件以进行练习.我在我的变量周围使用引号,但我仍然收到以下错误:

/usr/local/bin/deleteall: line 6: [: too many arguments
/usr/local/bin/deleteall: line 11: [: too many arguments 
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#!/bin/bash
#Deletes all files in the current directory

read -p "You are about to delete all files in $(pwd). Are you sure you want to do this? y/n" yn
echo $yn
if [ [ "$yn" = "y" ] -o [ "$yn" = "Y" ] ] ; then
        for i in `ls`; do
                rm $i
        done
        exit;
elif [ [ "$yn" = "n" ] -o …
Run Code Online (Sandbox Code Playgroud)

unix bash shell

3
推荐指数
1
解决办法
5838
查看次数

删除 Coq 中的简单匹配子句

考虑以下示例:

Definition cast {A : Set} (B : Set) (prf : A = B) (x : A)   : B.
  rewrite prf in x.
  refine x.
Defined.

Lemma castLemma0 {A : Set} : forall (x : A) prf, cast A prf x = x.
Proof.
  intros.
  compute.
???
Run Code Online (Sandbox Code Playgroud)

计算步骤之后,我们留下以下上下文和子目标

A : Set
x : A
prf : A = A
______________________________________(1/1)
match prf in (_ = y) return y with
| eq_refl => x
end = x
Run Code Online (Sandbox Code Playgroud)

显然,左侧和右侧是相等的。但我不知道如何摆脱左侧烦人的“匹配”子句。特别是,尝试破坏 prf 会产生以下错误

Abstracting …
Run Code Online (Sandbox Code Playgroud)

pattern-matching coq

3
推荐指数
1
解决办法
246
查看次数