【问题标题】:C++ NetLink Sockets ErrorC++ NetLink 套接字错误
【发布时间】:2014-04-11 21:16:36
【问题描述】:

我最近再次开始使用 C++ 应用程序。我正在使用 NetLink for Sockets 和 Visual Studio 进行开发。

我编写了一个小代码,但出现了一些错误。我已经包含了来自 NetLink 的文件并添加了 ws2_32.lib(在链接器/通用和编译注释中),但我仍然遇到这些错误:

Error   1   error LNK2019: unresolved external symbol "void __cdecl NL::init(void)" (?init@NL@@YAXXZ) referenced in function _main  c:\Users\Joshua\documents\visual studio 2012\Projects\OBPP\OBPP\Main.obj
Error   4   error LNK2019: unresolved external symbol "public: class NL::Socket * __thiscall NL::Socket::accept(void)" (?accept@Socket@NL@@QAEPAV12@XZ) referenced in function "private: virtual void __thiscall OnAccept::exec(class NL::Socket *,class NL::SocketGroup *,void *)" (?exec@OnAccept@@EAEXPAVSocket@NL@@PAVSocketGroup@3@PAX@Z)  c:\Users\Joshua\documents\visual studio 2012\Projects\OBPP\OBPP\Main.obj
Error   6   error LNK2019: unresolved external symbol "public: bool __thiscall NL::SocketGroup::listen(unsigned int,void *)" (?listen@SocketGroup@NL@@QAE_NIPAX@Z) referenced in function _main c:\Users\Joshua\documents\visual studio 2012\Projects\OBPP\OBPP\Main.obj
Error   5   error LNK2019: unresolved external symbol "public: __thiscall NL::SocketGroup::SocketGroup(void)" (??0SocketGroup@NL@@QAE@XZ) referenced in function _main  c:\Users\Joshua\documents\visual studio 2012\Projects\OBPP\OBPP\Main.obj
Error   2   error LNK2019: unresolved external symbol "public: __thiscall NL::Socket::Socket(unsigned int,enum NL::Protocol,enum NL::IPVer,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned int)" (??0Socket@NL@@QAE@IW4Protocol@1@W4IPVer@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@I@Z) referenced in function _main  c:\Users\Joshua\documents\visual studio 2012\Projects\OBPP\OBPP\Main.obj
Error   3   error LNK2019: unresolved external symbol "public: __thiscall NL::Socket::~Socket(void)" (??1Socket@NL@@QAE@XZ) referenced in function _main    c:\Users\Joshua\documents\visual studio 2012\Projects\OBPP\OBPP\Main.obj
Error   7   error LNK1120: 6 unresolved externals   c:\users\joshua\documents\visual studio 2012\Projects\OBPP\Debug\OBPP.exe

我正在使用的代码(只是想尝试接受):

#include <iostream>

#include "netlink\socket.h"
#include "netlink\socket_group.h"

#pragma comment(lib, "Ws2_32.lib")
#define PORT 30000

class OnAccept: public NL::SocketGroupCmd {
        void exec(NL::Socket* socket, NL::SocketGroup* group, void* reference) {
                NL::Socket* newConnection = socket->accept();
                group->add(newConnection);
            std::cout << "\nConnection " << newConnection->hostTo() << ":" << newConnection->portTo() << " added...";
            std::cout.flush();
    }
};

int main()
{
    NL::init();
    NL::Socket s(PORT);
    NL::SocketGroup group;

    group.setCmdOnAccept(&OnAccept());

    group.add(&s);

    if (group.listen(2000))
    {
            std::cout << "Listening on Sockets, port " << PORT << std::endl;
    }

    getchar();
}

【问题讨论】:

  • 也许您的目标是 x86_64/win64,而该库只有 32 位目标代码。
  • 不,我的目标是win32。
  • 好吧,我就是这么想的,你说的是“menustrip”行下“Debug/Release”旁边的下拉菜单吗?解决方案设置中的平台也是Win32,我的项目设置中也是Win32。

标签: c++ sockets netlink


【解决方案1】:

我是图书馆的开发者。不能只和header一起使用,需要链接静态/动态编译库。

您必须先构建库,才能生成 .lib 文件。一旦你构建了 netLink.lib 文件(或任何你命名的文件),你必须将该依赖项添加到链接器。

【讨论】:

    【解决方案2】:

    我不是 Visual Studio 开发人员,但错误消息显示 unresolved external symbol 表示链接器无法找到某些符号。 看看你的链接命令是否包含 Netlink 库?

    【讨论】:

    • 杰普。我的 Main.cpp 文件(我的入口点所在的位置)中没有任何错误。包含所有netlink头文件的库。
    • 我想你会有一些用于 netlink 的 dll 文件吧?
    • 不。我阻止使用 .dll。它应该通过将头文件包含到项目的属性中来工作,但它没有。
    • 我知道你需要库(dll)在运行时执行内部例程,除非它特定于 Visual Studio?如何在运行时找到执行程序的例程?
    • 我没有使用 C++/CLI,但我使用的是 Win32 C++(不使用 .NET Framework)。对于 Win32 C++,您不需要使用 dll。大多数情况下,您使用 .lib 或将路径与头文件一起使用(在我的情况下)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2012-10-26
    相关资源
    最近更新 更多