我正在为32位和64位Linux操作系统创build驱动程序。 其中一个要求就是所有的代码都需要自己包含,而且没有任何呼叫。 在64位我没有问题,但在32位GCC似乎添加到下一个字节的调用指令。 search了一下后,我发现这个链接: http://forum.soft32.com/linux/Strange-problem-disassembling-shared-lib-ftopict439936.html 有没有办法在32位Linux上禁用这个function? 例如:32位拆卸: <testfunc>: 0: push %ebp 1: mov %esp, %ebp 3: call 4 <test_func+0x4> <…some operation on ebx as mentioned in the link above> 64位disassebmly: <testfunc>: 0: push %rbp 1: mov %rsp, %rbp 3: <…no call here> “testfunc”中根本没有调用。 即使那么为什么32位编译器添加这些“调用”指令? 任何帮助表示赞赏。
在将C ++应用程序从32位转换为64位Linux时,我发现了一个有趣的bug。 我们的FileStore类实现了保存/恢复文件的结构。 除了一个方法之外,它总是在每个操作之前和之后调用fopen()和fclose()。 在32位平台上的这个(buggy)方法中,即使该文件之前已经被其他方法使用了fclose(),它也可以没有错误地fseek()和fread()。 在64位平台上,每次都在fread()上崩溃。 我想在32位平台上,底层的FILE结构在fclose()之后仍然存在,所以仍然可以访问它。 有没有人有任何进一步的信息,为什么这个差异和任何其他问题与64位文件I / O?
我试图在debugging器中运行dfhack 。 我正在运行64位的Ubuntu Trusty,但矮人堡垒没有64位版本,所以我正在运行32位的矮人堡垒(Dwarf Fortress)。 我已经通过apt-get install gdb:i386 。 下面是我用gdb启动dfhack时发生的情况: ben@australium:~/df_linux$ xvfb-run -a ./dfhack –gdb GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent […]
我有两台机器本地编译完全相同的源代码/ make文件:Linux Fedora 16 32位和Linux Fedora 17 64位。 在32位机器上: (gdb) break FRS::FRS Breakpoint 4 at 0x804ea29: file ntfs.cpp, line 751. Breakpoint 5 at 0x804e18f: file ntfs.cpp, line 505. warning: Multiple breakpoints were set. Use the "delete" command to delete unwanted breakpoints. GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) 在64位机器上: (gdb) break FRS::FRS Breakpoint 1 at 0x407daf: file […]
这似乎是一个很普遍的问题,但是我还没有find明确的答案。 我可以访问运行linux的服务器,具有16 GB的RAM和16核(64位)CPU(/ proc / cpuinfo给出了“Intel(R)Xeon(R)CPU E5520 @ 2.27GHz”)。 但是,内核是32位(uname -m给i686)。 当然,我没有root权限,所以我不能改变它。 我正在运行一个我编写的C ++程序,它需要一些内存耗费的计算,所以我需要一大堆 – 但是每当我尝试分配超过2GB的数据时,我都会得到一个badalloc,尽pipeulimit返回“unlimited”。 为了简单起见,我们只是说我的程序是这样的: #include <iostream> #include <vector> int main() { int i = 0; std::vector<std::vector<int> > vv; for (;;) { ++i; vv.resize(vv.size() + 1); std::vector<int>* v = &(vv.at(vv.size() – 1)); v->resize(1024 * 1024 * 128); std::cout << i * 512 << […]
我坚持了整整一个下午试图让pythonbuild立在32位模式。 我使用openSUSE 11.3运行64位Linux机器,我安装了必要的-devel和-32bit软件包,以32位模式构build应用程序。 Python构build的问题似乎不是在make运行本身,而是在后来运行的make.py调用setup.py。 我发现Ubuntu Linux的以下指令:h ** p://indefinitestudies.org/2010/02/08/how-to-build-32-bit-python-on-ubuntu-9-10-x86_64/ 当我如上所述,我得到以下输出: http://pastebin.com/eP8WJ8V4 但是我有libreadline,libopenssl等的-32位软件包。 安装,但当然,他们驻留在/ lib和/ usr / lib而不是/ lib64和/ usr / lib64。 当我启动这个构build的python二进制文件时,我得到: ./python Python 2.6.6 (r266:84292, Oct 5 2010, 21:22:06) [GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2 Type "help", "copyright", "credits" or "license" for more information. Traceback (most recent call last): File "/etc/pythonstart", line 7, […]
我有一个在x86上工作的现有C代码库。 我现在编译它为x64。 我想要做的是将一个size_t转换为一个DWORD,并且在数据丢失的情况下抛出一个exception。 问 :这有一个成语吗? 这就是为什么我这样做: 一堆Windows API接受DWORD作为参数,并且代码当前假定sizeof(DWORD)== sizeof(size_t)。 这个假设适用于x86,但不适用于x64。 因此,在编译x64时,传递size_t代替DWORD参数,会生成编译时警告。 在几乎所有这些情况下,实际大小不会超过2 ^ 32。 但我想要防守和明确地编码。 这是我的第一个x64项目,所以…要温柔。
可能重复: 检测当前的Windows版本是32位还是64位 在运行时检查Windows是否为64位的正确方法? (C ++) 我发现了一些有关这个话题的问题,但并不完全是我所需要的。 我正在开发一个完全跨平台的C ++ / Qt应用程序,除了一些预编译的.exe的应用程序必须运行。 (只有Windows是相关的问题)。 我有这些可执行文件的32位和64位Windows版本。 我知道一个select是打包整个应用程序的两个版本,但是代码中的更改将会非常less,以至于我想要考虑其他select。 那么,有没有一种方法可以在运行时使用C ++ / Qt特性检测底层Windows是32位还是64位版本? 谢谢!
我有一个共享的DLL,它是build立在32位和64位。 两个版本使用相同的名称,foo.dll。 我如何在系统上同时安装foo.dlls,以便我的32位和64位应用程序在其path中find正确的dll。 Windows本身使用SysWOW64(用于32位dll)和System32(用于64位dll)。 我想避免部署到这些文件夹。 什么是可接受的方式(如果有的话)在这两个位上的DLL共存在同一个盒子,并find适当的应用程序链接到他们?
我试图读取Windows 64环境中的一些进程的PE头,因为我的代码只是读取IMAGE_NT_HEADERS结构的32位和64位可执行文件,我想知道:我需要写一些像 if executable is 64 bit use IMAGE_NT_HEADERS64 else use IMAGE_NT_HEADERS ? 我的代码似乎只使用IMAGE_NT_HEADERS 64和32位进程工作,我错过了什么?