`

64位系统下 编译 32位

 
阅读更多
 

64位ubuntu下编译32位汇编程序(同时链接C库)

as --32   cmd.s -o cmd.o   # 调试的话加上选项 -gstabs

ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 cmd.o -o cmd -lc

        --32声明为32位程序   

       链接时elf_i386也是表明链接32位库

        -dynamic-linker /lib/ld-linux.so.2 使我们能链接到库,这样可执行文件会在执行前生成,而操作系统将加载程序/lib/ld-linux.so.2,以加载外部库并将其链接到程序。这种程序称为动态链接器。

        选项-lc表示:链接库c。该库在GNU/Linux系统上的文件名称为libc.so。给定库名,在本例中为c(通常库不止一个字符),GNU /Linux链接器就爱那个字符串lib加至库名前,就爱那个字符串.so加到库名后,构成库文件名。这个库包含很多函数以自动执行各种任务。我们使用了 printf和exit。

        当我们使用-lc来链接cmd程序时,将该选项告诉链接器使用c库(即libc.so)来寻找未在cmd,o中定义过的符号。但实际上这并未增加任何代码 到我们的程序,只是在程序中说明到哪里寻找。程序cmd开始时,首先加载文件/lib/ld-linux.so.2,这是动态链接器,会查看cmd程序, 并法线改程序需要c库才能运行。因此链接器在标准目录(即/etc/ld.so.conf下以及环境变量LD_LIBRARY_PATH中的所有目录下) 查找名为libc.so的库,然后在库中查找所需符号(即printf和exit),并加载到程序的虚拟内存。最后,链接库以库中printf的实际位置 代替程序中的printf的所有实例。

   运行ldd  ./cmd

        这次会报如下信息

  1. linux-gate.so.1 =>  (0xf7763000)  
  2. libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7590000)  
  3. /lib/ld-linux.so.2 (0xf7764000)
 
转载:http://www.cnblogs.com/haoweishow/archive/2012/02/04/2338000.html
 
以下过程是因为本机安装Emacs之前所有的编译工程都是OK的,但是安装了Emacs之后g++就编译不了了。
 
解决/usr/bin/ld: cannot find -lc过程
1. 在本机系统中搜索libc.so
2. 搜索到的结果:/lib/i386-linux-gnu/libc.so.6
3. 进入/usr/lib或者/usr/local/lib目录
4. 建立libc.so的软连接:ln -sv /lib/i386-linux-gnu/libc.so.6 libc.so
 
解决/usr/bin/ld: cannot find -lm过程
1. 在系统中搜索libm.so
2. 搜索到的结果:/usr/lib/i386-linux-gnu/libm.so
3. 进入/usr/lib目录
4. 建立libm.so的软连接:ln -sv /usr/lib/i386-linux-gnu/libm.so libm.so
分享到:
评论

相关推荐

    VB6在64位下编译32位下可使用的数据库程序

    现在XP退出历史舞台了,Win7代替了它,内在都有4G以上了,所以用64位操作系统是必须的,但是64位下用VB6编译带有数据库操作的程序可能无法在32位下正常使用!,这里提供解决方案,希望对VB6的用户有所帮助!

    编译好的boost库 包含32位系统和64位系统 windows版本

    windows版本编译好的Boost库 包含头文件 和Lib 32位和64位全都有 下载就可用

    编译32位和64位luajava的方法

    总之,编译32位和64位的`luajava`需要对操作系统、JDK、C编译器以及Java开发有一定了解。确保每一步都针对正确的体系结构进行,并且在测试阶段仔细检查以确保兼容性。对于Windows用户,尤其需要注意选择合适的交叉...

    64位系统下编译Detours的傻瓜式处理

    在64位系统下编译Detours会报错。本资源是帮助那些编译遇到困难的朋友。包内包含Detours需要修改的代码,以及一个编译用的批处理文件,一个readme。 详情请参阅 ...

    Windows 下编译的ffmpeg64位

    在Windows环境下编译64位版本的FFmpeg,需要遵循一定的步骤和注意事项。以下将详细介绍这个过程以及相关知识点。 1. **编译环境准备**: - 首先,你需要安装一个支持64位编译的编译器,如Visual Studio或MinGW-w64...

    androidAPK反编译工具32/64

    "androidAPK反编译工具32/64"提供了解决这一需求的工具,它包括了32位和64位版本,适应不同的操作系统环境。 首先,让我们来了解一下APK反编译的基本概念。反编译是将已编译的二进制代码转换回源代码的过程。对于...

    64位系统调用32位Access 运行时

    64位系统能够提供更大的内存寻址空间和更高的性能,而32位应用则在某些情况下可能无法充分利用这些优势。标题提到的“64位系统调用32位Access运行时”涉及到的问题,主要是当一个64位的操作系统尝试运行32位版本的...

    编译好的libiconv.lib和libiconv.dll,含64位及32位

    4. **32位与64位**:这里的“32位libiconv”和“64位libiconv”是指分别适用于32位和64位操作系统的库文件。32位系统使用x86架构,而64位系统使用x86_64或AMD64架构。不同的系统需要对应位数的库文件,否则程序可能...

    TIFFLIB 32位 64位 编译库

    在32位和64位的环境下,编译库的差异主要在于指针大小和内存管理,32位库适用于32位操作系统,而64位库则适用于64位系统。在实际项目中,需要根据目标平台选择相应的库版本。 使用TIFFLIB进行开发时,开发人员需要...

    awk源码及windows下64位和32位编译说明

    本篇将详细介绍awk的源码、Windows下的编译过程,以及针对64位和32位系统的不同编译步骤。 首先,了解awk的基本概念。awk来源于1977年贝尔实验室的三位开发者——Alfred V. Aho、Peter J. Weinberger和Brian W. ...

    反编译软件32位 dnSpy

    dnSpy是一款功能强大的32位反编译工具,它允许用户查看、编辑和调试.NET程序集,包括DLL和EXE文件。在这个32位版本中,你可以处理任何32位的.NET应用程序,揭示其内部工作原理,这对于软件开发、逆向工程、漏洞分析...

    windows下编译32位和64位luajava

    在Windows环境下编译32位和64位的luajava1.1涉及到多个步骤和技术细节,这是一项对操作系统和编程环境有深入了解的任务。Luajava是Lua语言与Java平台的桥梁,允许在Lua中调用Java代码,反之亦然。下面我们将详细探讨...

    64位系统到32位系统下跑

    标题中的“64位系统到32位系统下跑”指的是在64位操作系统上开发的应用程序或组件可能无法在32位系统中正常运行的问题。这个问题通常涉及到系统架构的兼容性,因为32位和64位系统之间存在差异。描述中提到的解决方法...

    64位系统可用 masm masm32 汇编工具

    标题 "64位系统可用 masm masm32 汇编工具" 提到的是在Windows 8 64位操作系统环境下使用的汇编语言编译工具,主要包括两个组件:ML.exe 和 MASM32。这里我们将深入探讨这两个组件以及它们在汇编编程中的角色。 1. ...

    Qt5.15.3:vs2019编译生成的32位动态库

    在本文中,我们将深入探讨如何使用Visual Studio 2019(VS2019)编译Qt 5.15.3版本以生成适用于32位系统的动态库。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面和移动平台,支持C++语言,并提供了丰富的图形...

    openssl-1.1.0e 32位编译

    这通常意味着在64位操作系统上安装32位库支持,如在Linux系统中的`ia32-libs`或`lib32*`系列包,在Windows下则可能需要Visual Studio的32位编译工具链。 **编译步骤** 1. **获取源代码**:从OpenSSL的官方网站下载...

    detour2.1 的32位和64位编译

    总结一下,Detour2.1的32位和64位编译涉及的知识点包括:钩子技术、32位和64位系统的差异、C++编译器的配置、项目构建过程、编译错误排查以及Detour库的API使用。掌握这些知识,你就能有效地利用Detour2.1在不同的...

    live555源码,vs2010编译源码、vs2013编译源码,以及32为、64位静态库

    1. 32位静态库:对于还在使用32位系统的用户,或者是需要在32位环境下运行的应用程序,32位的Live555静态库是必需的。它能提供完整的编译和运行支持,无需额外安装依赖库。 2. 64位静态库:随着硬件的发展,64位...

    OpenCV3.4.1+VS2013在win10系统的编译结果(32位)

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,包含了众多图像处理和计算机视觉的算法。...这个编译好的32位库对于那些使用x86架构系统的开发者来说,是直接可用的,省去了他们自己编译的繁琐过程。

Global site tag (gtag.js) - Google Analytics