object-files相关内容
我有一个用于测试的C程序:a.c int a = 0; static int fa_local() { a = 78; int b; int c; } int fa_global() { a = 7777; fa_local(); } int test() { a = 6666; fa_global(); } 这是生成后的
..
我找不到翻译单元、编译单元、目标文件、可执行文件之间的区别...在许多地方,我看到使用其中一个而不是另一个。 我知道这些文件是在C++程序编译和链接期间生成的。是否有人可以列出在这些过程中生成的所有文件并指定它们之间的区别? 推荐答案 翻译单元与编译单元相同(因此您的源代码及其包含的所有头文件) 目标文件通常是编译单元编译的结果。 可执行文件是将项目的目标文件与运行时库函
..
我想知道如何获取此Berkeley格式输出: $ size --format=berkeley /bin/ls text data bss dec hex filename 124042 4728 4832 133602 209e2 /bin/ls 从此sysv格式输出: $ size --format=sysv /bin/l
..
如何查看 .o 文件中的符号?nm 对我不起作用.我使用 g++/linux. 解决方案 你可以使用强大的objdump来代替nm.有关详细信息,请参见手册页.试试 objdump -t myfile 或 objdump -T myfile.使用 -C 标志,您还可以像 nm 那样对 C++ 名称进行分解.
..
目前,一个项目中的链接器在链接到另一个项目中的源文件生成的目标文件时存在问题.有没有办法手动将这些目标文件添加到 Qt 中? 解决方案 尝试在 *.pro 文件中使用 LIBS 指令; LIBS +=/path/to/foo.o
..
我知道 .OBJ 是编译一个编译单元的结果,.LIB 是一个静态库,可以从几个 .OBJ 创建,但这种区别似乎只在编译单元的数量上.还有其他区别吗?是相同还是不同的文件格式? 当我想知道在两个(或更多).LIB 中定义的相同静态变量是否在链接到最终可执行文件期间被合并时,我遇到了这个问题.对于 .OBJ,变量被合并.但在 .LIB 中是否也一样? 解决方案 .LIB 文件是与索引连接
..
这实际上是一个链接器/目标文件问题,但由于编译器从不这样做,所以使用程序集进行标记.(虽然也许他们可以!) 考虑这个函数,我想用与函数入口点在同一 I-cache 行中的代码块来处理一个特殊情况.为了避免在通常的快速路径中跳过它,将代码放在函数的全局符号之前是否安全(链接/共享库/其他我没有想到的工具)? 我知道这很愚蠢/矫枉过正,见下文.主要是我只是好奇.不管这种技术是否有助于使代码
..
去年,我在一所研究型大学工作,开始使用 Fortran 进行编程.我以前的大部分经验都是使用 PHP 或旧 ASP 等网络语言,所以我是编译语句的新手. 我正在修改两个不同的代码. 一个在创建可执行文件之前有一个从模块创建 .o 文件的显式语句(例如 gfortran -c filea.f90). 另一个是直接创建可执行文件(有时创建.mod文件,但没有.o文件,例如gfortr
..
我正在阅读 C 语言中的库,但我还没有找到关于什么是目标文件的解释.任何其他编译文件和目标文件之间的真正区别是什么? 如果有人能用人类语言解释我会很高兴. 解决方案 目标文件是编译阶段的真正输出.它主要是机器代码,但具有允许链接器查看其中包含哪些符号以及其工作所需的符号的信息.(作为参考,“符号"基本上是全局对象、函数等的名称) 链接器获取所有这些目标文件并将它们组合成一个可执行文
..
如何将两个 GCC 编译的 .o 目标文件合并为第三个 .o 文件? $ gcc -c a.c -o a.o$ gcc -c b.c -o b.o$ ???a.o b.o -o c.o$ gcc c.o other.o -o 可执行文件 如果您有权访问源文件,-combine GCC 标志将在编译前合并源文件: $ gcc -c -combine a.c b.c -o c.o 然而这仅适用
..
首先,我的本机系统是 amd64,Windows,使用 cygwin,以及 GNU 工具链和 binutils. 我正在编写一个 x86 引导加载程序,但无法让 ld 生成正确的相对地址.我已经准备了这个最小的可重复示例: main.s .code16.global _start.section .text_开始:打电话给其他人高 other.s .code16.global 其
..
我正在尝试将程序集文件编译为目标文件.这个汇编文件调用了一个 c 函数.但是我遇到这个错误:二进制输出格式不支持外部引用 我在汇编文件的第 17 行调用了 c 函数 我尝试用这个命令编译它: cpu/interrupt.o: cpu/interrupt.asmnasm $ 我该如何解决这个问题 [extern isr_handler];通用 ISR 代码isr_common_st
..
我正在研究C ++编程语言,并且对编译器如何创建可执行文件有疑问.我的书说: C ++是一种编译语言,因此您需要将源代码转换为计算机可以执行的文件.该文件由编译器生成,称为目标代码(.obj),但是像hello world程序这样的程序由我们编写的部分和C ++库的一部分组成. hello world程序中的哪个部分? 然后我的书说: 您必须编译并链接程序的两个部分以生成可
..
我有一个包含简单结构的标头 util.hpp : //util.hpp结构点{浮动x;浮动y;}; 两个cpp文件,我们称它们为 a.cpp 和 b.cpp ,它们都包含 util.hpp : //a.cpp#include"util.hpp"void funcA(float _x,float _y){点p;p.x = _x;p.y = _y;//...} //b.cpp#includ
..
如何将外部子例程链接到Fortran中的主程序?虽然,我从书中得到的答案是"Fortran 90 for Scientists and Engineer"(科学家和工程师专用的Fortran 90)如下: 还请注意,由于外部子程序位于单独的位置主程序中的文件,则必须单独编译.在下面FTN90一种中间类型的机器代码,称为可重定位二进制文件在扩展名为.OBJ的文件中生成.反过来这必须是通过称
..
如何查看.o文件由.so文件组成? 表示如何注意到目标文件是用来从.so文件构建.so文件的(如果我只有.so文件的话) 解决方案 在仅提供了共享库的情况下,您无法知道 编译进去.如果幸运的话,您也许可以做出合理的猜测. 链接器通过目标文件和共享库创建共享库 可能还有其他共享库,但它不包含目标文件 或共享它的库.另一方面,一个 static 库 由存档器 ar 制成,确实包含目
..
我对.obj文件感到好奇:我几乎不知道它们是什么(或它们包含什么),所以我用Vim文本编辑器打开了它们,发现里面是一种外星人般的语言... 有什么办法可以理解它们代表什么以及它们的内容是什么 另外,它们被用作什么? 谢谢. 解决方案 好的. 但是每个不同的平台都有不同的对象格式.在Windows上,您可以使用 dumpbin 之类的工具(dumpbin是Visual附带的
..
例如,我定义一个宏: #ifdef VERSION //.... do something #endif 如何检查目标文件中是否存在VERSION?我试图用objdump对其进行反汇编,但是没有发现我的宏VERSION的实际值. VERSION在Makefile中定义. 解决方案 尝试使用gcc中的-g3选项进行编译.它将宏信息也存储在生成的ELF文件中. 此后,如果您在
..
我正在使用C ++程序,一个1200行文件(用于初始化一个相当复杂的状态机)的编译后目标代码几乎达到了一个兆字节.是什么使文件如此之大?有什么方法可以找到导致目标文件占用空间的东西吗? 解决方案 目标文件大于其最小值必须有多个原因: 静态包括依赖库 使用调试信息进行构建 使用分析信息进行构建 使用模板(可能是递归的boost-结构)创建(极端)复杂的数据结构 在编译时不打开优
..
我有一个使用qmake的Qt项目.为了提高清晰度和可读性,我想保留 源文件 构建系统 生成的文件(例如目标文件) 分开. 所以我的第一步是将源文件放入src/子目录: myproject/ myproject.pro src/ main.cpp MainWindow.ui ... 这样,我从构建系统(*
..