【问题标题】:Error when linking zmq c++ header链接 zmq c++ 标头时出错
【发布时间】:2018-11-18 19:14:34
【问题描述】:

我正在尝试在 C++ 项目中使用 zmq。 当我想构建一个简单的示例时,我很困惑。

为此,我使用 VisualC++ 2010 的 .sln 单独构建了 libzmq v3.2.3。然后我下载了 zmq.hpp 并将其包含在内。 例子是zmq指南的第一个:

//
//  Hello World server in C++
//  Binds REP socket to tcp://*:5555
//  Expects "Hello" from client, replies with "World"
//
#include <zmq.hpp>
#include <string>
#include <iostream>
#include <unistd.h>

int main () {
//  Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:5555");

while (true) {
    zmq::message_t request;

    //  Wait for next request from client
    socket.recv (&request);
    std::cout << "Received Hello" << std::endl;

    //  Do some 'work'
    sleep (1);

    //  Send reply back to client
    zmq::message_t reply (5);
    memcpy ((void *) reply.data (), "World", 5);
    socket.send (reply);
}
return 0;
}

编译没问题,但链接不行:我收到这样的错误:

error LNK2019: external symbol unresolved __imp__zmq_term refrenced in function "public: void __thiscall zmq::context_t::close(void)" (?close@context_t@zmq@@QAEXXZ)

zmq 的路径似乎没问题;我就是不明白为什么VC++在zmq.hpp里面找不到小方法的代码

你看到我忘记做什么了吗?

编辑: 下面是输出窗口的内容(抱歉,是法文版,但我觉得很相似):

1>------ Début de la génération : Projet : libzmq, Configuration : Debug Win32 ------
1>          1 fichier(s) copié(s).
1>  libzmq.vcxproj -> <...>\..\Ouptut\Debug\libzmq_d.lib
2>------ Début de la génération : Projet : HelloServeur, Configuration : Debug Win32 ------
2>  HelloServeur.cpp
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_init référencé dans la fonction "public: __thiscall zmq::context_t::context_t(int)" (??0context_t@zmq@@QAE@H@Z)
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_errno référencé dans la fonction "public: __thiscall zmq::error_t::error_t(void)" (??0error_t@zmq@@QAE@XZ)
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_strerror référencé dans la fonction "public: virtual char const * __thiscall zmq::error_t::what(void)const " (?what@error_t@zmq@@UBEPBDXZ)
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_term référencé dans la fonction "public: void __thiscall zmq::context_t::close(void)" (?close@context_t@zmq@@QAEXXZ)
2><...>\..\Ouptut\Debug\HelloServeur.exe : fatal error LNK1120: 4 externes non résolus
========== Génération : 1 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

【问题讨论】:

  • 头文件未链接,库已链接。您通常需要包含一个标头,以便编译器了解您的代码与标头所代表的库有关,但您仍然必须在链接中包含该库。
  • 对不起,我的错。我的意思是链接 main() 的代码时存在链接错误。在链接期间正确添加了lib,但所有链接错误都与包装器zmq.hpp中的方法有关
  • 您遇到的错误与您认为“正确添加了库”的信念直接冲突;)也许发布 MSVC 正在使用的实际链接命令(也就是说,从构建日志中复制它以粘贴在这里)。

标签: c++ zeromq


【解决方案1】:

如果您使用的是静态库,则需要将 .lib 添加到链接器设置中,在链接器 | 下输入|项目设置中的其他依赖项。

【讨论】:

    【解决方案2】:

    好的,我们找到了原因。 libzmq 的 vcxproj 在静态库和动态库的编译之间存在一些可怕的混合。恢复正确的项目后一切都很好。感谢大家的帮助

    【讨论】:

      【解决方案3】:

      我们没有使用 VisualC++,但在链接时遇到了类似的错误。 使用 -lzmq 标志编译为我们解决了这个问题。

      g++ zmq.cpp -lzmq
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 2018-04-07
        • 2015-07-23
        • 2017-03-16
        • 1970-01-01
        相关资源
        最近更新 更多