linker 相关问题

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

iostream 链接器错误

我有一些旧的 C 代码,我想将它们与一些 C++ 代码结合起来。 以前的C代码有以下内容: #包括 #包括 #包括 我有一些旧的 C 代码,我想将它们与一些 C++ 代码结合起来。 以前的C代码有以下内容: #include <windows.h> #include <stdio.h> #include <string.h> #include "mysql.h" 现在我正在尝试让它使用 C++ 和 iostream,如下所示: #include <windows.h> #include <stdio.h> #include <string> #include <iostream> #include "mysql.h" 但是我在编译时不断收到以下链接器错误: [链接器错误]未定义对 `std::string::size() const' 的引用 [链接器错误]未定义对 `std::string::operator[](unsigned int) const' 的引用 [链接器错误]未定义对 `std::string::operator[](unsigned int) const' 的引用 [链接器错误]未定义对 `std::string::operator[](unsigned int) const' 的引用 [链接器错误]未定义对 `std::ios_base::Init::Init()' 的引用 [链接器错误]未定义对 `std::ios_base::Init::~Init()' 的引用 ld 返回 1 退出状态 我该如何解决这个问题? 编辑:我的编译器是Dev-C++ 4.9.9.2 C string.h 标头和 C++ string 标头不可互换。 不过,总的来说,您的问题是文件已正确编译,但链接了错误的运行时库。 Dev-C++ 使用 GCC。 GCC 可以根据文件扩展名正确确定文件中的语言,但不会链接正确的运行时库,除非您特别要求它(在命令行中-lstdc++)。将 GCC 称为“g++”(或者,在您的情况下,“mingwin32-g++”)也将获得正确的语言,并将链接所需的库。 您需要链接到您的 C++ 运行时。这取决于您的平台和编译器,但将 -lc 添加到链接器命令中可能会做到这一点。 因此可能会使用您的 C++ 编译器而不是 ld 进行链接。 无论如何,如果您希望 C++ 代码正常工作,您可能必须使用 C++ 编译器而不是 ld 进行链接——通常需要异常和静态初始化程序才能正常工作... 尝试使用 Cygwin 进行编译时,我遇到了同样的错误 (g++)。 将 -L/usr/local/bin -L/usr/lib 添加到编译命令应该可以工作。 这可能是 Cygwin 特有的,但它也可能有助于解决您的问题。

回答 3 投票 0

在 CMake 中构建期间添加链接器选项

是否可以向 CMake 生成的链接命令行添加其他选项作为某些构建操作的结果? 具体来说,我需要通过静态保留一些未引用的符号

回答 1 投票 0

Visual Studio 中的链接库,为什么有两种不同的方式?

我需要将库从一个项目链接到另一个项目,看起来有两种方法,你能说出有什么区别以及在一种设置中为“true”而在另一种设置中为“false”的后果是什么吗? .

回答 2 投票 0

在不更改调用站点的情况下包装函数?

假设函数 int foo(int x) 在库 libfoo 中可用,但我无法控制它。我确实控制了一个在许多文件中多次调用 foo() 的代码库。 现在,我想插入一些...

回答 1 投票 0

在 cmake 和 g++10 中使用 <filesystem> 标头时出现错误

我在 Ubuntu 20.4 LTS 上使用 c++20 和 g++10 在我的 cmake 项目中使用 #include c++ 标准库 // 属性.hpp #包括 #包括 F级...

回答 2 投票 0

如何找出哪个翻译单元实例化了链接的函数模板来调试 ODR 问题?

在我的代码中,我有一个函数模板,它测试某些指针是否可转换,有点像这样: 模板 bool test() { 返回需要(T* p) { static_c...

回答 1 投票 0

在C++代码中引用-llog后,生成的库的大小显着增加

我使用 NDK 将 C++ 代码编译成动态库。最初,我的代码与 log4 动态库链接,并使用 -llog 包含 Android 日志记录库。然而,后来我

回答 1 投票 0

如何找出哪个翻译单元实例化了函数模板?

在我的代码中,我有一个函数模板,它测试某些指针是否可转换,有点像这样: 模板 bool test() { 返回需要(T* p) { static_c...

回答 1 投票 0

从一个源文件生成多个对象文件

问题 在编译期间获取多个源文件并生成单个目标文件是相当常见的(g++ -c file1.cpp file2.cpp)。是否有可能走另一条路并创建多个

回答 1 投票 0

为什么 MSVC 链接器在 64 位构建上选择 kernel32.lib 函数而不是我的静态库,而不是 32

刚刚花了半天调试这个 - grr。我知道如何解决它,但对这种行为感到惊讶。想知道是否有一个合乎逻辑的解释 最小重现 #包括 typedef 枚举 { ...

回答 1 投票 0

ARM GCC 链接器脚本,用于在 RAM 中启动时初始化 .data 部分

虽然我的问题涉及STM32的ARM GCC编译和链接,但它更直接与GCC链接器脚本的正确编写相关。 我有以下链接器脚本...

回答 1 投票 0

何时包含 .lib 以及何时包含 .dll 或两者都包含

我从硬件供应商处获得了一个 .h 文件、两个 .lib 文件、一个 .dll 文件和一个小型测试项目来与他们的硬件进行对话。 编译并运行他们的测试项目效果很好。值得注意的是:他们...

回答 3 投票 0

神秘的相对路径库依赖

在 Visual Studio 2008 中加载现有的 MFC 应用程序后,出现一个链接错误: 链接:致命错误 LNK1104:无法打开文件 '..\..\xpressmp\lib\xprm_rt.lib' 我看过“

回答 3 投票 0

Apple 的 getsectiondata 函数的第一个参数是什么?

我需要访问 ld -sectcreate 包装的二进制资源。一些较新的材料(例如这个答案中的评论)告诉我应该使用 getsectiondata 而不是 getsectbyname 才能正确工作......

回答 1 投票 0

尝试在 Windows 11 上使用预编译的二进制文件运行 rustqlite 时缺少的“sqlite3.lib”文件是什么?

我是 Rust 生态系统的新手。我正在尝试使用 rustqlite crate,这样我就可以存储不适合内存的非常大的索引。我立即收到运行时错误,它出现故障并...

回答 3 投票 0

ARM MCU 如何找到我重定位的向量表?

我使用的是 NXP Kinetis K64 ARM Cortex M4 MCU。我成功更改了链接器配置文件,将向量表移至地址 0x8000(而不是默认地址 0x0000)。当我告诉

回答 1 投票 0

源文件中的 typedef 会导致 ODR 违规吗?

我养成了始终将源文件中定义的类型包含在未命名命名空间中的习惯,因为我知道它们可能会导致 ODR 违规: // my_source.cpp 命名空间{ 结构体 MyStruct {}; } 什么

回答 1 投票 0

为什么 LINK.EXE 需要 .EXP 文件来适应 .DLL 文件之间的循环依赖关系?

注意:.LIB 的所有情况均指 link.exe 导入库,而不是目标文件的存档。 我花了很长时间弄清楚如何适应 .DLL 文件之间的循环依赖关系

回答 1 投票 0

在 vfork() 之后,链接器如何在不破坏父内存的情况下解析 execve()?

如果 execve@plt 包含调用链接器的存根,则解析 execve 地址的过程是否保证不会修改父级的任何内存?

回答 1 投票 0

使用 objcopy 从原始二进制文件创建对象时如何指定符号名称?

如本答案所述,GNU objcopy 可用于从任意文件内容创建目标文件。该方法可用于将资源嵌入到程序中。然而,符号名称是通用的...

回答 1 投票 0

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