问题标签 [linker-errors]

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.

0 投票
3 回答
1053 浏览

c++ - 带有指针的链接器错误

我正在尝试构建一个程序来Tolkinize一个字符串(我试图在不使用字符串类的情况下做到这一点 - 以便了解有关指针和字符如何工作的更多信息) - 我已经构建了一个我认为有效的程序(任何建议会很棒!)当我尝试编译程序时,我得到了这些随机错误:

错误 1 ​​错误 LNK2019:函数 _main 驱动程序中引用的未解析外部符号“public: char * __thiscall Tokenize::next(void)”(?next@Tokenize@@QAEPADXZ)

错误 2 错误 LNK2019:函数 _main Driver 中引用的未解析外部符号“public: __thiscall Tokenize::Tokenize(char const * const,char)”(??0Tokenize@@QAE@QBDD@Z)

错误 3 致命错误 LNK1120: 2 unresolved externals C:\Users\Simmons 2.0\Documents\School\CS1410\project 5\Token\Debug\Token.exe

我已经向几个朋友展示了这段代码,他们都不知道发生了什么——或者我做错了什么……

注意:我正在运行 VS 2008 express edition - Windows 7 x64


主文件


标记化.h


标记化.cpp

根据我的测试(注释掉行),我认为其中一个错误来自tokinze.next()

0 投票
3 回答
3543 浏览

c++ - 链接时大量 std:: 函数的多重定义

我正在尝试将一些外部代码集成到我的应用程序中。我的代码是纯 C,但新代码是 C++,所以我只是将我的 C 文件重命名为 .cc 并用 g++ 编译了整个东西。

它编译得很好,但我得到了一堆链接错误:

我正在使用 Cmake 来构建这个东西,但没有什么复杂的。我不知道为什么会出现所有这些错误,因为我的代码只是一堆方法(我不使用 std 包中的任何东西)而且我尝试集成的代码并不复杂。

请注意,警告来自链接我自己的代码,而不是(还)来自新的 C++ 代码。

有人吗?

编辑:在挖掘了我尝试集成的外部代码后,我发现了一些包括:

此外,iostream 也包含在其他标头中,并且所有标头都包含保护。

更新:我设法清理了一些外部代码并删除了不必要的依赖项。我仍然有一些链接器错误,但要少得多:

代码包括cmathand cstdlib,并使用默认命名空间引用 abs 和其他函数。这可能是问题吗?

0 投票
2 回答
2277 浏览

c++ - 如何使用/链接 gdLibrary (libgd) 与 MS Visual C++(例如 2008 Express Edition)?出现 LNK2019 错误

我必须在 MS Windows XP Prof. SP3 32bit 上的 C++ 应用程序中使用 gdLibrary ( http://www.libgd.org ) - 我正在尝试和谷歌搜索两天但没有成功。你们中有人将 libgd 与 MS VC++ 200x EE 一起使用吗?

我的问题:必须用 MS Visual C++ 编译(例如 2008 Express Edition - 修复了第 3 方条件)......但目前链接器崩溃,出现以下LNK2019错误中的 11 个:

链接... codereate.obj:错误 LNK2019:在“public:virtual __thiscall CodeCreate::~CodeCreate(void)”中找到未定义的外部符号“_gdImageDestroy”

其他符号是_gdImageColorExact_gdImageCopyResized以及其他一些 gd 函数。似乎 VC++ 链接器无法与bgd.lib我从http://www.libgd.org/releases/gd-latest-win32.zip.

我做了什么/尝试过:

  1. 提取gd-latest-win32.zipc:\users\johndoe\cpp\libgd.
  2. 定义c:\users\johndoe\cpp\libgd\libals 附加库目录(全局 VC++ 设置)
  3. 定义c:\users\johndoe\cpp\libgd\include为附加包含目录(全局 VC++ 设置)
  4. 定义c:\users\johndoe\cpp\libgd\include\lib\bgd.lib为附加链接器\输入依赖项(项目设置)
  5. 我什至加入#pragma comment(lib, "libgd.lib")了我codecreate.h的保存方。

有什么建议么?我在做什么错(例如我忘记安装某些东西)?有什么“技巧”可以让 VC++ 2008 兼容bgd.lib吗?

补充笔记:

  1. 在 Linux/g++ 上运行,一切正常,没有-pedantic -ansi -wAll. 该程序完成其工作并生成一些条形码。
  2. 在使用 DevC++ for Win32 时有效。因此,这不是 Windows 问题,“只是”一个 VC++ 问题。对于 DevC++,我做了:
    • 我刚下载http://www.libgd.org/releases/gd-latest-win32.zip
    • 将其提取到c:\users\johndoe\cpp\libgd
    • 在链接器项目设置中添加c:\users\johndoe\cpp\libgd\lib\bgd.lib为附加对象。
    • 定义c:\users\johndoe\cpp\libgd\lib了其他库目录,
    • 定义c:\users\johndoe\cpp\libgd\include为附加包含目录
    • 对一些条形码的东西感到高兴
  3. 如果我不能让它工作,我真的有麻烦了......现在变得非常绝望:-(
0 投票
1 回答
21112 浏览

c++ - 链接静态库时内联函数的多重定义

我有一个用 mingw (gcc for Windows) 编译的 C++ 程序。使用包含 gcc 4.4.1 的 mingw 的 TDM 版本。可执行文件链接到两个静态库 (.a) 文件:其中一个是用 C 编写的第三方库;另一个是我编写的 C++ 库,它使用 C 库提供了我自己的 C++ API。

C 库功能的一部分(在我看来是多余的)是在内联函数中实现的。当您使用 C 库的 API 时,您无法避免包含内联函数,但是当我尝试将它们全部链接在一起时,我收到链接错误,说所有内联函数都有多个定义 - 我都有在我的 C++ 包装器库和我没有调用的包装器库中调用,基本上在标头中内联定义的任何内容都已在 C 库和 C++ 库中为它创建了一个函数。

在同一个项目的不同.c或.cpp文件中多次使用include文件时,不会导致多次定义错误;问题只是它为每个库生成一个定义。

编译器如何/为什么在两个库中为这些内联函数生成函数和符号?如何强制它停止在我的代码中生成它们?有没有我可以运行的工具来从 .a 文件中删除重复的函数,或者有一种方法可以让链接器忽略多个定义?

(仅供参考,第三方库确实在其所有标头中包含 #ifdef __cplusplus 和 extern "C" 保护;无论如何,如果这是问题,它不会导致符号的多重定义,它会导致相反的问题,因为符号会未定义或至少不同。)

值得注意的是,如果我链接到第三方 C 库的 DLL,则不会发生链接错误;但是,然后我遇到奇怪的运行时故障,这似乎与我的代码有自己的函数版本有关,它应该从 DLL 调用。(好像编译器正在创建我没有要求的函数的本地版本。)

之前有人问过这个问题的类似版本,但是,我没有在以下任何一个中找到我的情况的答案:

这个问题的答案是海报是多重定义变量,我的问题是内联函数的多重定义: Repeated Multiple Definition Errors from include same header in multiple cpps

这是一个 MSVC 程序,但我使用的是 mingw;另外,这个问题中的发帖者的问题是在标题中的类主体之外定义了一个 C++ 类构造函数,而我的问题是内联的 C 函数: 静态库多重定义问题

这个傻瓜将他所有的 C 代码重命名为 C++ 文件,而他的 C 代码不是 C++ 安全的: 链接时对许多 std:: 函数的多重定义

这个只是想知道为什么违反一个定义规则不是错误: 具有不同定义的内联函数的不可预测的行为

0 投票
3 回答
4383 浏览

c++ - 仅发布版本的大量链接器问题

有人对此有想法吗?链接器错误超出了我的控制范围,尤其是像这样的错误。

还有更多我应该包括的信息吗?

0 投票
4 回答
7258 浏览

c++ - 对 LibSerial 的未定义引用

所以我正在编写一个串行传输程序,并且刚刚改用 C++,自从我使用 C++ 以来已经有一段时间了(我最近一直在使用 C,在此之前我一直在使用 java)

现在我需要使用 LibSerial,(使用起来似乎比 C 的 termios 简单得多)

我的代码是:

当我编译输出时:

0 投票
4 回答
2049 浏览

c++ - 链接器无法链接我的应用程序(XXXX 已在 XXXX.obj 中定义)

当我尝试构建我的应用程序时,链接器会出现大量错误,例如:

modlauch.obj : 错误 LNK2005: "public: virtual __thiscall lolbutton::~lolbutton(void)" (??1lolbutton@@UAE@XZ) 已经在 lolbutton.obj 中定义

我怀疑它与错误配置的编译器有关,但我不知道如何修复它。我的课程只包含一次,所以我认为它与代码没有任何关系。我曾尝试重建和清理项目,但没有帮助

有人可以建议解决这个问题吗?我的平台是Win32(C++)并且我正在使用MFC

0 投票
6 回答
4901 浏览

c++ - VS2008:我可以用不同文件夹中的2个同名CPP文件构建一个项目吗?

这是我的文件夹结构:

在构建项目时,我收到一个链接错误(LNK2028:未解析的令牌等等......),说一些符号没有定义。我已经确认所有符号都已定义,并且所有声明的函数都有相应的定义。

我有一种感觉,在编译我的项目时,两个文件夹中的文件在输出文件utility.cpp夹中被编译成相同的文件。utility.obj结果,一个覆盖另一个。

  1. 这是预期的行为吗?
  2. 如何构建具有两个同名文件(尽管位于不同文件夹中)的 C++ 二进制文件?
0 投票
2 回答
2472 浏览

c++ - 涉及运算符重载函数的 C++ 链接器错误

我有一个节点类型的列表。我想设置一个临时Node等于List前面的Node,如下:

但我不断收到链接器错误:

链接...
main.obj:错误 LNK2019:未解析的外部符号“public:class Node & __thiscall Node::operator=(class Node const &)”(??4Node@@QAEAAV0@ABV0@@Z) 在函数中引用“ void __cdecl fillScan(int,class std::list >)" (?fillScan@@YAXHV?$list@VNode@@V?$allocator@VNode@@@std@@@std@@@Z)
C:\Users \Aaron McKellar\Documents\School Stuff\CS445\Test\Debug\Test.exe : 致命错误 LNK1120: 1 unresolved externals

提前致谢!

0 投票
1 回答
2600 浏览

linux - Linux FreeBSD 共享对象问题

我正在尝试为 freebsd 构建一个应用程序,该应用程序链接到在 linux 上构建的共享对象“share.so”。我在 /usr/compat/linux/lib 下也有 freebsd linux 兼容库。我能够编译我的应用程序。但是在链接到“share.so”时,我遇到了一堆错误,因为 share.so(基于 linux 构建)需要访问“/usr/compat/linux/lib”下的库。有没有办法告诉 share.so 查看兼容的 linux 目录而不是 /usr/lib/

这些是我收到的警告。这些版本在 compat/linux/lib 中可用,因为 /usr/lib 包含较低版本。这里sharedlib.so是linux上生成的.so文件