使用名称空间链接到静态库时,无法解析的外部符号

德基

我今天遇到了一种我不完全了解的行为。我直接进入一个最小的代码示例,并逐步进行说明。

我有2个项目:静态c ++库和控制台应用程序。

静态库项目:

图书馆

#pragma once

namespace foo
{
    int testFunc();

    class StaticLibClass
    {
    public:
        static int testMemberFunc();
    };

}

库.cpp

#include "Library.h"

using namespace foo;

// just some functions that don't do much
int testFunc()
{
    return 10;
}

int StaticLibClass::testMemberFunc()
{
    return 11;
}

控制台应用程序项目:

main.cpp

#include "library.h"

using namespace foo;

void main()
{
    // calling this function reslts in LNK2019: unresolved external symbol...
    testFunc();

    // this function works just fine
    StaticLibClass::testMemberFunc();
}

如您所见,类的静态成员函数可以正常工作。但是,单个testFunc会导致链接器错误。为什么是这样?

解决该问题的方法是,不要在Library.cpp文件中使用“ using”,而是将其包装在命名空间中,如下所示:

解决此问题的更改:

库.cpp

#include "Library.h"

namespace foo
{

    // just some functions that don't do much
    int testFunc()
    {
        return 10;
    }

    int StaticLibClass::testMemberFunc()
    {
        return 11;
    }
}
查克·沃尔本

您可能需要将实现函数/方法的主体包装在与原始标头匹配的名称空间语句中,或者可以使用完全合格的名称,这可能是更好的C ++样式:

#include "Library.h"

// just some functions that don't do much
int foo::testFunc()
{
    return 10;
}

int foo::StaticLibClass::testMemberFunc()
{
    return 11;
}

您不需要使用命名空间foo;在这个版本中。实现这两种方法的主体时,您已经在名称空间'foo'中,但是根据该名称空间中的其他类型,它可能很方便。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用名称空间的静态库导致无法解析的外部

来自分类Dev

在Windows上将Cython扩展链接到C库时出现“无法解析的外部符号”错误

来自分类Dev

动态链接可以正常工作时,无法使用VS2012链接到静态Boost库

来自分类Dev

链接静态库时对未解析的符号强制错误

来自分类Dev

Visual Studio 2012错误LNK2019:无法解析的外部符号,与正在运行的静态库链接

来自分类Dev

与使用名称空间的外部库链接时,如何解决C中的未定义引用?

来自分类Dev

MFC静态链接未解析的外部符号

来自分类Dev

与OpenCV 3.0链接时出现“无法解析的外部符号”错误

来自分类Dev

无法在Linux上使用Mingw链接到静态库

来自分类Dev

无法在Linux上使用Mingw链接到静态库

来自分类Dev

链接静态库的未解析符号

来自分类Dev

当链接为* .a静态库时,为什么无法解析“ WinMain”?

来自分类Dev

使用GCC链接到静态库时遇到问题

来自分类Dev

链接到共享库时,不会导出静态库中的符号

来自分类Dev

使用外部dll时无法解析的外部符号

来自分类Dev

将静态库链接到共享库并隐藏导出的符号

来自分类Dev

Qt 5.4静态生成在Visual Studio 2013中产生“无法解析的外部符号”链接错误

来自分类Dev

尽管选项正确,但静态链接不适用于C ++ / CLI(无法解析的外部符号)

来自分类Dev

LNK2019错误(无法解析的外部符号)将SQLite链接到DLL

来自分类Dev

无法将外部git CMake项目的输出(静态库)链接到CMake项目

来自分类Dev

仅少数方法(静态或共享库)中无法解析的外部符号

来自分类Dev

使用shared_ptr时无法解析的外部符号

来自分类Dev

使用CImg库时出现无法解决的外部符号错误

来自分类Dev

无法使用VS2012链接到静态Boost库,而动态链接可以正常工作

来自分类Dev

链接静态库并解析

来自分类Dev

无法链接CPP文件-无法解析的外部符号

来自分类Dev

无法在共享库中解析符号,但未提供符号名称

来自分类Dev

使用automake将共享库链接到静态libtool库

来自分类Dev

QtCreator-无法链接到静态库(ld错误)

Related 相关文章

  1. 1

    使用名称空间的静态库导致无法解析的外部

  2. 2

    在Windows上将Cython扩展链接到C库时出现“无法解析的外部符号”错误

  3. 3

    动态链接可以正常工作时,无法使用VS2012链接到静态Boost库

  4. 4

    链接静态库时对未解析的符号强制错误

  5. 5

    Visual Studio 2012错误LNK2019:无法解析的外部符号,与正在运行的静态库链接

  6. 6

    与使用名称空间的外部库链接时,如何解决C中的未定义引用?

  7. 7

    MFC静态链接未解析的外部符号

  8. 8

    与OpenCV 3.0链接时出现“无法解析的外部符号”错误

  9. 9

    无法在Linux上使用Mingw链接到静态库

  10. 10

    无法在Linux上使用Mingw链接到静态库

  11. 11

    链接静态库的未解析符号

  12. 12

    当链接为* .a静态库时,为什么无法解析“ WinMain”?

  13. 13

    使用GCC链接到静态库时遇到问题

  14. 14

    链接到共享库时,不会导出静态库中的符号

  15. 15

    使用外部dll时无法解析的外部符号

  16. 16

    将静态库链接到共享库并隐藏导出的符号

  17. 17

    Qt 5.4静态生成在Visual Studio 2013中产生“无法解析的外部符号”链接错误

  18. 18

    尽管选项正确,但静态链接不适用于C ++ / CLI(无法解析的外部符号)

  19. 19

    LNK2019错误(无法解析的外部符号)将SQLite链接到DLL

  20. 20

    无法将外部git CMake项目的输出(静态库)链接到CMake项目

  21. 21

    仅少数方法(静态或共享库)中无法解析的外部符号

  22. 22

    使用shared_ptr时无法解析的外部符号

  23. 23

    使用CImg库时出现无法解决的外部符号错误

  24. 24

    无法使用VS2012链接到静态Boost库,而动态链接可以正常工作

  25. 25

    链接静态库并解析

  26. 26

    无法链接CPP文件-无法解析的外部符号

  27. 27

    无法在共享库中解析符号,但未提供符号名称

  28. 28

    使用automake将共享库链接到静态libtool库

  29. 29

    QtCreator-无法链接到静态库(ld错误)

热门标签

归档