linker 相关问题

链接器是工具链的一部分,用于从编译的编程语言编写的源代码生成可执行文件。它将编译的目标代码放在多个文件中,并从中生成一个“链接”的可执行文件。

“fff”假函数框架如何在引入强符号的同时避免违反 ODR 规则?

我正在尝试了解 fff 框架和 C++ 的单一定义规则。 我使用 fff 来模拟自由函数并测试它们,我将使用下面的示例来解释问题所在。

回答 1 投票 0

是否可以将链接器脚本与 Apple ld64 链接器一起使用?

如标题所示,您可以将链接器脚本与 Apple ld64 链接器一起使用吗?我的意思是类似于 GNU ld 的 -T 的选项。

回答 1 投票 0

无法链接到 Android NDK 的 FFTW 库

我想在我的 Android NDK 项目中使用 FFTW3。因此,我在 MacOs for Android 上构建了该库,如下所示: ./configure --host=aarch64-none-linux-android33 --enable-threads --enable-float 须藤我...

回答 1 投票 0

c++ 在命名空间中声明 extern 全局变量时未定义引用

我有一个类“定义”我的应用程序 compose-app.cpp #包括 #包括 #包括 我有一堂课“定义”我的应用程序compose-app.cpp #include <framework/framework_module.hpp> #include <framework/logging/logging_module.hpp> #include <hal/dma/dma_module.hpp> namespace bla::application { using namespace framework; using namespace framework::logging; using namespace hal::dma; framework_module framework_module_; io_module io_module_(framework_module_); dma_module dma_module_(framework_module_); ... ... // many other objects are constructed here } 我的整个应用程序几乎都在使用类/结构,但有一些文件只是带有一些函数的标准 cpp 文件。例如,log.cpp。 在 log.cpp 中我想使用全局变量,这应该不是问题,我可以简单地将变量声明为 extern 就完成了。嗯,反正我也是这么想的。 log.cpp(简化): #include <etl/string.h> #include <etl/to_string.h> #include <framework/framework_module.hpp> #include <framework/logging/logging_module.hpp> extern xxx::framework::framework_module framework_module_; namespace xxx::framework::logging { static xxx::framework::free_rtos::ifree_rtos &_free_rtos = framework_module_._free_rtos; static SemaphoreHandle_t _semaphore; void initialize() { _semaphore = _free_rtos.create_counting_semaphore(1, 1); } } 我认为这应该没问题,但它给出了以下链接器错误 /opt/gcc-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/13.2.1/../../../../arm-none-eabi/bin/ld: CMakeFiles/app.dir/home/dev/app/source/framework/log.cpp.obj: in function `xxx::framework::logging::initialize()': /home/dev/app/source/framework/log.cpp:57:(.text._ZN7valinso9framework7logging10initializeEv+0x2c): undefined reference to `xxx::framework::framework_module_' 它指出,对“xxx:framework::framework_module_”的未定义引用。但这是类型的正确命名空间 framework_module #if !defined (unittests) #pragma once #include <framework/project.h> #include <framework/project_definitions.hpp> #include <framework/free_rtos/free_rtos.hpp> #include <framework/irq/irq_handler_installer.hpp> #include <framework/free_rtos/exclusive_lock.hpp> #include <framework/free_rtos/read_write_lock.hpp> namespace xxx::framework { class framework_module { public: framework_module(); free_rtos::free_rtos _free_rtos; irq::irq_handler_installer _irq_handler_installer; }; } #endif 我之前处理过这个问题,我隐约记得这与变量定义的命名空间有关。但我似乎无法做到这一点。我尝试将外部变量定义移动到命名空间内,但这并不能解决问题。 说实话,我根本不明白编译器/链接器如何处理外部变量的命名空间,这无助于解决这个问题... 在 compose-app.cpp 中,您定义了类型为 framework_module_ 的变量 framework_module 并将其放入命名空间 bla::application 中。 但是,在 log.cpp 中,您声明了一个名为 extern 、类型为 framework_module_ 的 xxx::framework::framework_module 变量,该变量存在于全局命名空间中。但在全局命名空间中没有定义这样的变量,因此出现链接器错误。您需要引用位于 bla::application 命名空间中的变量。

回答 1 投票 0

努力理解Makefile隐式规则

这是我的Makefile,目标只是编译一堆测试文件并将它们与另一个名为tap.c 的文件链接,该文件包含我的测试函数。 SRCS = $(通配符*.c) OBJS = $(SRCS:.c=.o...

回答 1 投票 0

crti.o 文件丢失

我正在使用 GNU 工具链构建一个项目,一切正常,直到我开始链接它,链接器抱怨它丢失/找不到 crti.o。这不是我的目标文件之一...

回答 9 投票 0

为什么链接失败? [重复]

这一行编译失败: #包括 结构体MyFoo { MyFoo() {} MyFoo(const MyFoo&) = 删除; MyFoo(MyFoo&&) = 默认; MyFoo& 运算符=(const M...

回答 1 投票 0

无法在 scon build 中获取可执行文件

我试图通过将 object(.o) 文件传递给 env.program() 来生成 .elf 文件。 只能生成目标文件,但是当我给出以下命令时,它只是不生成任何内容。

回答 1 投票 0

静态构建 zlib 的未解析外部符号

我在VS2022。我正在我的 C++ 项目中创建一个小型静态库来处理嵌入式资源(所以我们称其为呃)。 该库使用zlib(最新版本,1.3.1)来压缩之前的文件

回答 1 投票 0

链接不同工作表的列中的最后一个单元格,即使它是一个单词

我已经阅读了如何使用以下方法将列中的最后一个#链接到不同工作表上的单元格中: =索引(sheet2!d:d,匹配(1e99,sheet2!d:d))。感谢发布它的人。我还需要链接最后一个

回答 1 投票 0

什么时候应该使用 ld 而不是 gcc?

我想知道什么时候应该使用 ld 链接器而不是 gcc。 我刚刚用c++写了一个简单的hello world,当然我包含了iostream库。如果我想用 gcc 制作一个二进制文件,我只需使用: g++ he...

回答 3 投票 0

如何防止链接器优化掉启动代码?

我有以下问题:我的(C++-)项目由多个子项目组成。在每个文件中,我都有几个文件,其中包含我想要在启动时运行的代码。到目前为止我的解决方案是使用静态变量......

回答 2 投票 0

尝试编译使用 libruby.so 的 C 程序时,链接器未找到 ruby 符号(例如 ruby_init)

我按照以下说明编译 ruby:https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html#label-Quick+start+guide 然后我制作了这个简单的 C 程序,它使用 ruby

回答 1 投票 0

使用 boost asio waitable_operators 在废弃部分定义链接器错误

包含有关您目标的详细信息 我想在 docker 容器中构建这个项目。 描述预期和实际结果 当在 docker 容器中以发布模式构建时,链接器报告错误...

回答 1 投票 0

在两个模块之间共享 sizeof(array)

我想在两个 .c 模块之间共享 sizeof(array) 的值。该数组在文件 A 中初始化,因此编译器在编译时知道其大小,然后我想在...

回答 5 投票 0

编译模板化类定义时出现链接器错误

我正在尝试编译一个使用模板化 Bag 类的小程序。其组织方式如下: //主.cpp #包括 #包括 #include“bag.h” 在...

回答 1 投票 0

如何在纯标头库中正确使用宏条件?

假设以下代码: /***** mylib.h *****/ #包括 类 foo { 民众: 无效测试() { #ifdef MYDEF ::std::cout<<"ZERO\n"; #else ::std...

回答 1 投票 0

使用 VS Code 构建具有多个 .cpp 源文件的 C++ 程序时出现错误的未定义引用

我已经在Linux Mint下安装了Microsoft VSCode,并打开了一个名为test1的文件夹,其中包含3个文件: test.cpp - 预先声明 foo() 和 bar(),然后在 main() 中调用这两个函数 foo.cpp - 定义

回答 2 投票 0

链接 google benchmark lib 时出现 LNK2001 链接器错误

我在项目中链接 benchmark.lib 时遇到问题。我已经按照此处所述构建了它。我有 sln 文件,编译它(在发布模式下),然后创建我自己的 VS 项目。链接器可以找到我的...

回答 2 投票 0

在CMake中,为什么可以设置编译器而不设置链接器?

我正在学习CMake。在我的各种阅读过程中,我有时会遇到显式设置 C/C++ 编译器的指令,例如通过传递 -D CMAKE_CXX_COMPILER "/path/to/compiler&

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.