标签: linker-errors

使用命名空间来创建全局函数,但是获得多个定义的符号错误

这些函数是我的大多数程序对象将使用的实用程序类型的东西.我希望将它们放在命名空间中并使它们具有全局性.此命名空间在标头中定义,然后添加到我的预编译标头中.但是到目前为止,我已经在2个不同的对象中使用了这个命名空间中的函数,并且编译器在这两个对象上抛出了多次定义的符号错误.

命名空间文件

#ifndef UTILS_H
#define UTILS_H

#include <random>
#include <cmath>


namespace Utils
{
    extern int GetRandomBetween(int low, int high)
    {
        if (low < 0 || low >= high)
            return 0;
        int seed = high - low;

        return (rand() % seed) + low;
    }
};

#endif
Run Code Online (Sandbox Code Playgroud)

和我的precomp标题

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#pragma once

#include "targetver.h"

//#define WIN32_LEAN_AND_MEAN             // Exclude …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors precompiled-headers

6
推荐指数
1
解决办法
7682
查看次数

使用模板类时链接器错误?

   I'm getting an "unresolved external symbol "public:__thiscall hijo<int>::hijo<int>(void)" referenced in function_main
Run Code Online (Sandbox Code Playgroud)

我开始了一个新项目,因为我在另一个更大的项目上遇到了同样的错误.当我尝试使用new关键字分配空间时发生错误.如果这个错误是愚蠢请原谅我因为我在过去几个月没有编程.

  /********************file hijo.h******************/
#pragma once
#ifndef hijo_h
#define hijo_h

template <class A>
class hijo
{
public:
    hijo(void);
    ~hijo(void);
};
#endif


  /********************file hijo.cpp***************/
    #include "hijo.h"
#include <iostream>
using namespace std;

template <class A>
hijo<A>::hijo(void)
{
}
template <class A>
hijo<A>::~hijo(void)
{
}
  /*********************at main() function ***************/

#include <iostream>
#include "hijo.h"

int main(){

    hijo<int> *h = new hijo<int>; <----  PROBLEM AT THIS LINE

    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates linker-errors

6
推荐指数
1
解决办法
5168
查看次数

RC2247:无法打开Rc文件:资源管理器无法加载资源; 加载失败

我有一个win 32项目,我正在努力,资源文件工作正常,直到昨天.现在当我尝试打开资源文件进行编辑时,它会崩溃并给我以下错误:

 C://program files/Microsoft SDKs/Windows/v6.0A/include/prsht.h(0)
 error RC2247: Symbol name too long
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我可能出错的地方或在哪里调查.rc文件是一个非常简单的对话框,带有静态文本和进度条.

windows winapi linker-errors visual-studio-2008 visual-c++

6
推荐指数
2
解决办法
6250
查看次数

testflight库和Xcode 5中没有任何变化现在说"ld:找不到-lTestFlight的库"

我已经创建了几个月的应用程序,突然Xcode 5不想构建它.它只是抱怨以下错误.

Ld build/Debug-iphonesimulator/appname.app/appname normal i386
cd /Users/myname/proyectos/appname/dev/iOS/appname
setenv IPHONEOS_DEPLOYMENT_TARGET 5.1
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/myname/proyectos/appname/dev/iOS/appname/build/Debug-iphonesimulator -L\"/Users/myname/proyectos/appname/dev/iOS/appname/appname/External/FlurryAnalytics\" -L\"/Users/myname/proyectos/appname/dev/iOS/appname/appname/External/SmartADServer\" -L\"/Users/myname/proyectos/appname/dev/iOS/appname/appname/External/TestFlight\" -F/Users/myname/proyectos/appname/dev/iOS/appname/build/Debug-iphonesimulator -F/Users/myname/proyectos/appname/dev/iOS/appname/appname/External -filelist /Users/myname/proyectos/appname/dev/iOS/appname/build/appname.build/Debug-iphonesimulator/Appname.build/Objects-normal/i386/appname.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=5.1 -weak_framework AdSupport -framework Security -framework MessageUI -framework Twitter -framework CoreLocation -weak_framework CoreMotion -framework AudioToolbox -framework AVFoundation -framework MediaPlayer -framework SystemConfiguration -framework MobileCoreServices -lz -framework CFNetwork -framework QuartzCore -framework UIKit -framework Foundation -framework CoreGraphics -lTestFlight -framework comScore -lFlurry -Xlinker -dependency_info -Xlinker /Users/myname/proyectos/appname/dev/iOS/appname/build/appname.build/Debug-iphonesimulator/Appname.build/Objects-normal/i386/appname_dependency_info.dat -o /Users/myname/proyectos/appname/dev/iOS/appname/build/Debug-iphonesimulator/appname.app/appname

ld: …
Run Code Online (Sandbox Code Playgroud)

xcode linker-errors ios

6
推荐指数
1
解决办法
4767
查看次数

为什么QCOMPARE(QString("1"),"1")导致链接器错误?

我正在探索Qt的单元测试框架,我注意到一件奇怪的事情 - 考虑到QString已经实现了相等运算符const char *,我本来希望QCOMPARE(QString("1"), "1")它可以工作,但它会导致链接器错误:

tst_untitled14test.obj:-1: error: LNK2019: unresolved external symbol "bool __cdecl QTest::qCompare<class QString,char const [2]>(class QString const &,char const (&)[2],char const *,char const *,char const *,int)" (??$qCompare@VQString@@$$BY01$$CBD@QTest@@YA_NABVQString@@AAY01$$CBDPBD22H@Z) referenced in function "private: void __thiscall Untitled14Test::testCase1(void)" (?testCase1@Untitled14Test@@AAEXXZ)
Run Code Online (Sandbox Code Playgroud)

示例代码:

QVERIFY(QString("1") == "1");         // This works.
QCOMPARE(QString("1"), QString("1")); // This works.
// QCOMPARE(QString("1"), "1");       // Causes a linker error!
Run Code Online (Sandbox Code Playgroud)

这是为什么?不QCOMPARE使用2项的等式运算符?

编辑:由于在评论中询问,该项目是由Qt Creator的单元测试向导(文件 - >新项目 - >其他项目 - > Qt单元测试)创建的,所以当然它已经正确设置,并QT += testlib包含在内.

c++ qt unit-testing linker-errors

6
推荐指数
1
解决办法
1176
查看次数

在Visual Studio中从asm调用C标准库函数

我在Visual Studio中创建的asm项目调用C函数时遇到问题(Win10 x64,Visual Studio 2015).项目由一个asm文件组成:

.586
.model flat, stdcall
option casemap:none
includelib msvcrt.lib

ExitProcess PROTO return:DWORD
extern printf:near

.data
text BYTE "Text", 0

.code
main PROC
    push offset text
    call printf
    add esp,4
    invoke ExitProcess,0
main ENDP
end main
Run Code Online (Sandbox Code Playgroud)

当我构建项目时,链接器输出错误:

错误LNK2019未解析的函数_main @ 0中引用的外部符号_printf

链接器输出参数:

/OUT:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.exe"/ MANIFEST:NO/NXCOMPAT /PDB:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pdb"/ DYNAMICBASE "kernel32.lib""user32.lib""gdi32.lib""winspool.lib""comdlg32.lib""advapi32.lib""shell32.lib""ole32.lib""oleaut32.lib""uuid.lib" "odbc32.lib""odbccp32.lib"/ MACHINE:X86/SAFESEH:NO/INCREMENTAL:NO /PGD:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pgd"/ SUBSYSTEM:WINDOWS/MANIFESTUAC: "level ='asInvoker'uiAccess ='false'"/ ManifestFile:"Debug\SP_Lab7_Demo.exe.intermediate.manifest"/ ERRORREPORT:PROMPT/NOLOGO/TLBID:1

如果我发表评论call print,那么一切都正常执行(甚至是Windows API函数).有没有办法从asm文件调用C函数而不创建包含的cpp文件<cstdio>?有可能吗?

x86 assembly masm linker-errors visual-studio

6
推荐指数
2
解决办法
4388
查看次数

为什么不在这个静态库中创建多个定义的符号?

在一个静态库项目中,我有一个带声明但未实现的函数的头文件.

我有一个实现这些功能的.cpp文件.

然后,为了更好地理解链接器错误,我复制了cpp文件,所以我有一个完全重复的它也被编译.因此,两个文件都有标头中每个符号的双重实现.

它编译,当在另一个项目中使用时,它会链接.

这是静态库的最小示例:

api.hpp:

void printWhatever();
Run Code Online (Sandbox Code Playgroud)

errortest.cpp和duplicate.cpp是相同的:

#include "api.hpp"
#include <iostream>
void printWhatever(){
  std::cout << "hi " << "\n";
}
Run Code Online (Sandbox Code Playgroud)

我将其编译为包含这两个源文件的静态库.我看到编译器为两个文件生成报告.

现在我在一个可执行文件中使用这个编译库,一个不同的项目:main.cpp:

#include <api.hpp>
int main(int argc, const char * argv[]) {
  printWhatever();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它运行并打印"hi".

为什么函数没有多重定义?

c++ linker linker-errors

6
推荐指数
1
解决办法
753
查看次数

libc++abi 未定义符号:_ZTVN10__cxxabiv120__si_class_type_infoE

我正在运行 Ubuntu 18.04.1 LTS,并尝试让 Half Life 的游戏库在 Xash3D 引擎中运行。它们构建正常,但是当我尝试运行引擎时,我收到以下令人困惑的错误:

undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE
Run Code Online (Sandbox Code Playgroud)

经过一些互联网研究后,我认为这基本上可以解决“VTable for __cxxabiv1::__si_class_type_info”。我已经安装了libc++abi-devlibc++-devlibc++abi1以及libc++1它们的 i386 对应版本(因为我必须以 32 位进行编译),所以我不知道为什么运行时链接会失败。

如果有帮助的话,我发现半条命存储库中的其他库(特别是死亡竞赛经典库)也可以工作。我检查了 makefile,DMC 库没有任何LDFLAGS设置,而标准的 Half Life 库使用:

LDFLAGS= -lm -lstdc++
Run Code Online (Sandbox Code Playgroud)

有什么原因导致我在这里收到链接器错误吗?我可以做什么来修复它们?

编辑:我正在使用 GCC/G++ 7.3.0。如果有帮助,我正在使用的库的 makefile 在这里:

有效的:https://github.com/ValveSoftware/halflife/blob/master/linux/Makefile.dmcdll

没有的:https://github.com/ValveSoftware/halflife/blob/master/linux/Makefile.hldll

我还在*_map.txt编译生成的文件中搜索了“libc”。这就是现在的情况:

在工作 DMC 映射文件中:

Archive member included to satisfy reference by file (symbol)

/usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
                              /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/animating.o (__stack_chk_fail_local)

As-needed library included to satisfy reference by file (symbol)

libstdc++.so.6                /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/nodes.o (operator new[](unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ linux linker-errors libc++ ubuntu-18.04

6
推荐指数
1
解决办法
7491
查看次数

与 Android NDK 交叉编译时,`ld: 无法识别的模拟模式:armelf_linux_eabi`

我正在尝试将开源库libsndfile与 Android NDK 交叉编译。我的主机是 Windows 10 下的 Ubuntu 子系统,目标是 Android 系统(目前任何人都会这样做)。对于构建,我使用 autogen+configure 设置,如 libsndfile文档中所述。编译在链接阶段停止,生成一个冗长的日志文件(略多于 400 行),其中包含多个错误。开始时的错误似乎并不重要,但请配置探测编译器设置,如 本文所述。最后一条错误消息指向链接器问题。我认为这是日志文件的相关摘录:

#include "..." search starts here:
#include <...> search starts here:
/home/alan/android-ndk-r18/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/7.0.2/include
End of search list.
 "/usr/bin/ld" --sysroot=../android-ndk-r18/platforms/android-17/arch-arm -z relro -X --enable-new-dtags --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /system/bin/linker -o a.out ../android-ndk-r18/platforms/android-17/arch-arm/usr/lib/../lib/crtbegin_dynamic.o -L../android-ndk-r18/platforms/android-17/arch-arm/usr/lib -L../android-ndk-r18/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib -L/home/alan/android-ndk-r18/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/7.0.2/lib/linux/arm -L../android-ndk-r18/platforms/android-17/arch-arm/usr/lib/../lib -L../android-ndk-r18/platforms/android-17/arch-arm/usr/lib /tmp/conftest-5c2dd3.o -lgcc -ldl -lc -lgcc -ldl ../android-ndk-r18/platforms/android-17/arch-arm/usr/lib/../lib/crtend_android.o
/usr/bin/ld: unrecognised emulation mode: armelf_linux_eabi
Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu i386linux elf_l1om elf_k1om i386pep i386pe
clang: …
Run Code Online (Sandbox Code Playgroud)

linker android linker-errors ld android-ndk

6
推荐指数
1
解决办法
1万
查看次数

什么是未定义的引用/未解析的外部符号错误以及如何在 Fortran 中修复它?

我正在尝试构建 Fortran 程序,但收到有关未定义引用或未解析的外部符号的错误。我看到了有关这些错误的另一个问题,但那里的答案大多特定于 C++。

使用 Fortran 编写时出现这些错误的常见原因是什么?如何修复/预防它们?


这是构建 Fortran 程序时出现的一系列错误的典型问题。如果您被推荐到这里,或者您的问题作为与此问题重复的问题而被关闭,您可能需要阅读几个答案中的一个或多个。从这个答案开始,它充当所提供解决方案的目录。

fortran linker-errors unresolved-external undefined-reference

6
推荐指数
2
解决办法
3578
查看次数