问题标签 [object-files]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 编译期间将模板化函数报告为“未定义引用”
这些是我的文件:
--------[ c.hpp ]--------
--------[ c.cpp ]--------
--------[ v.cpp ]--------
--------[ main.cpp ]--------
我可以使用命令 g++ -c main.cpp 和 g++ -c c.cpp 等为所有上述文件生成“.o”文件。但是,当我尝试将“.o”文件与 g++ -o car co main.o vo 链接时,我收到此错误:
当我取消注释 main.cpp 中的 #include "c.cpp" 行时,错误消失了,但我觉得以这种方式包含 cpp 文件可能是不好的做法。我做错了吗?在创建单独的目标文件并链接它们时,是否有更好的方法来满足模板化声明?ps:我在更复杂的类结构中使用模板化函数。此处显示的只是一个小示例,目的是向您展示我所面临的错误类型。
c++ - 如何查看目标文件中的符号?
如何查看 .o 文件中的符号?nm 对我不起作用。我使用 g++/linux。
opengl - .obj 文件转换为 OpenGL 模型头文件 - 索引和 f 参数?
我正在使用的 OpenGL 模型头文件包含以下定义:
static const float modelVertices[NUM_OBJECT_VERTEX * 3] = {}
static const float modelTexCoords[NUM_OBJECT_VERTEX * 2] = {}
static const float modelNormals[NUM_OBJECT_VERTEX * 3] = {}
static const unsigned short modelIndices[NUM_OBJECT_INDEX] = {}
在括号之间用逗号分隔的一堆数字(浮点数和整数,如合适)。
v, vt, vn
将 .obj 文件转换为上述格式似乎很简单。我的 .obj 文件也有一堆f
's,其中包括由 . 分隔的三元组/
。我不确定这些参数到底是什么......
我需要转换哪些参数才能获得第四个 - modelIndices?
(我需要提前承认我是 OpenGL 的新手,如果这看起来太初级,请道歉!)
c - 链接目标文件,使包含冗余?
我正在尝试一点 C。我以为我已经理解了这个链接业务。但我想不会。我有一个简单的文件 main.c:
然后是第二对文件 function.c/function.h
编译这个效果很好。但是,无论我是否#include "function.h"
在我的主文件中使用,它都很好用。那为什么我需要包含 function.h 呢?
linux - 在 Linux 上使用 gcc 进行增量链接。是否可以?
我团队项目的开发方式是,我们从所有.o
对象文件中为我们的应用程序生成一个共享对象库。我的任务(希望它足够具体,但也足够通用以对其他人有用!)是仅链接自上次创建可执行文件以来已更改的目标文件。例如,这是我用来构建 .so 的命令行:
哪个按预期工作!:) 我的目标是从现在开始只能链接更改的目标文件,以加快并发链接过程。一个示例命令是:
这将libMySharedLibrary.so
使用较新的目标文件进行更新,同时还保留较旧的目标文件libMySharedLibrary.so
。实际上,当我libMySharedLibrary.so
使用上面的命令生成时,文件大小比包含所有目标文件时的文件大小要小得多,所以我几乎可以肯定上面的命令没有做我想要的。
通过我的研究,我发现-i
链接器有一个选项与-r
选项相同,它似乎也只是将所有目标文件组合成一个大目标文件。不幸的是,这似乎不是我想要的。
简而言之,我只想在初始链接之后链接更改的目标文件,从而为将来的链接提供更快的链接过程。有没有办法做到这一点?
编辑:我尝试过的一个例子-i/-r
:
示例命令:g++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject2.o MyObject3.o MyObject4.o -o AllMyObjects.o
我必须添加-nostdlib
标签以阻止它对我大喊大叫需要它,并删除,-shared
因为标签不允许共享对象-r
。
这个命令似乎将我所有的 .o 文件都塞进一个大的 .o 文件中。因此,如果我可以从现在开始仅使用已更改的 .o 文件更新该 .o 文件,那就太好了。在最初创建 AllMyObjects.o 之后,我尝试了这个命令:g++34 -Wl,-r -nostdlib -rdynamic -m64 -Wl,-rpath,'$ORIGIN' MyObject1.o MyObject3.o -o AllMyObjects.o
,但它也会创建一个更小的 (file-size-wise) AllMyObjects.o
,所以我假设它不可能拥有所有的目标文件。我觉得这是我可能会犯一个小错误的事情。有人有什么建议吗?提前致谢。
c++ - Typedefs,(二进制)代码重复和目标文件
假设我编译了一个包含这段代码的源文件,
由于Point
和Size
完全相同(就其成员的内存布局而言),编译器是否会struct
在目标文件中生成重复代码(每个代码一个)?这是我的第一个问题。
现在,让我们struct Size
从源代码中删除 ,并使用它来定义它typedef
,就像这样,
现在编译会做什么?它会重复代码吗(因为 typedef 不仅仅是重命名,而不仅仅是重命名)?
现在假设我们有一个这样的类模板:
然后我们设置一些定义,像这样,
由于int UnUsed
类的实现中没有使用模板参数(只是假设),所以看起来这种情况与具有完全相同的内存布局的多个类完全相同(类似于struct Point
and的情况struct Size
),是否会出现重复代码目标文件?
如果我们这样做会怎样,
这种情况是否更好,因为现在我们在 typedefs 中使用相同的实例化类?
PS:这个类模板代码取自这里:
实际上,我不知道编译器如何从源代码生成目标文件,以及它如何处理类名、成员、其他符号等等。它如何处理 typedef?这有什么用,
ArrayInt
这里有新类型吗?什么代码编译器在目标文件中为它创建?存储在哪里100
?
linker - 编译可执行文件后合并目标文件
我有一个包含许多 .o 文件的可执行文件。我想将这些目标文件减少到一个文件,但我没有可执行文件的源代码。是使用“ar”归档它们是这样做的方法还是如果不重新编译源就不可能?
c - 在 Delphi 2007 中链接多个 C 对象文件时出错
我是德尔福的新手。我试图在我的 Delphi 项目中添加 C 对象文件并直接链接它们,因为 Delphi 支持 C 对象链接。当我链接一个对象文件时,我得到了它的工作。但是当我尝试链接多个目标文件时,我收到错误“不满意的转发或外部声明”。我在 Delphi 2007 和 XE 中都试过这个。那么我在这里做错了什么?
工作代码:
错误代码:
qt - 如何在 Qt 中将目标文件添加到项目中
目前,一个项目中的链接器在链接到另一个项目中的源文件生成的目标文件时存在问题。有没有办法手动将这些目标文件添加到 Qt 中?
cmake - 如何从 CMake 构建目标仅生成目标文件 (*.o)?
我正在尝试使用 CMake 构建一个目标文件,但我似乎无法让 CMake 构建一个完整的可执行文件以外的东西。我基本上是在寻找以下编译的结果(结果将加载到 VxWorks 目标上并随后链接):
我试过改变OUTPUT_NAME
目标的属性,但这似乎也无济于事。
我想我可以通过使用自定义命令来解决这个问题,但这似乎我也在解决 CMake 提供的好东西。
谢谢你的帮助!