我在嘗試在我的新應用程序中使用ZeroMQ時遇到問題。請注意:我沒有問題下載和建立ZeroMQ本身。我下載了ZeroMQ ZIP文件,在Visual Studio/C++ 2008中打開了項目/解決方案文件,並構建了ZeroMQ庫。 ZeroMQ安裝文件夾的/ lib目錄包含.lib,.dll和其他文件,據我所知,這一切都很好。ZeroMQ和Visual C++ 2008的鏈接器問題
我的問題是,我正嘗試在ZeroMQ用戶指南中構建一個包含HelloWorld服務器示例的簡單項目。我創建了以下叫做helloserver.c的文件。
//
// Hello World server
// Binds REP socket to tcp://*:5555
// Expects "Hello" from client, replies with "World"
//
#include <zmq.h>
#include <stdio.h>
#include <string.h>
int main (void)
{
zmq_msg_t request;
zmq_msg_t reply;
void *context = zmq_init (1);
// Socket to talk to clients
void *responder = zmq_socket (context, ZMQ_REP);
zmq_bind (responder, "tcp://*:5555");
while (1) {
// Wait for next request from client
zmq_msg_init (&request);
zmq_recvmsg (responder, &request, 0);
printf ("Received Hello\n");
zmq_msg_close (&request);
// Do some 'work'
Sleep (1);
// Send reply back to client
zmq_msg_init_size (&reply, 5);
memcpy (zmq_msg_data (&reply), "World", 5);
zmq_sendmsg (responder, &reply, 0);
zmq_msg_close (&reply);
}
// We never get here but if we did, this would be how we end
zmq_close (responder);
zmq_term (context);
return 0;
}
我添加ZeroMQ installatiion包括目錄到VC++ 2008包括路徑(屬性 - >配置屬性> C/C++ - >通用>附加包含目錄)和I還添加了ZeroMQ lib目錄到項目: (屬性 - >配置屬性 - > C/C++ - >代碼生成 - >運行時庫,選中Multithreaded Debug DLL/MDd)。
我試圖建立這個項目。一切編譯罰款布提得到一堆無法解析的外部像這樣的鏈接時:
1>鏈接... 1> helloserver.obj:錯誤LNK2019:解析外部符號_ 小鬼 _zmq_term在函數引用_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_close在函數引用_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_sendmsg在函數引用_main 1> helloserver.obj:錯誤LNK2019 :無法解析的外部符號_ imp _zmq_msg_data refe renced在函數_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_msg_init_size在函數引用_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_msg_close在函數引用_main 1 > helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_recvmsg在函數引用_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_msg_init在函數引用_main 1> helloserver.obj:錯誤LNK2019:無法解析的外部符號_ imp _zm q_bind在函數引用_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_socket在函數引用_main 1> helloserver.obj:錯誤LNK2019:解析外部符號_ imp的 _zmq_init在函數引用_main 1> C:\ work \ visualC++ 2008 \ projects \ HelloZMQServer \ Debug \ HelloZMQServer.exe:致命錯誤LNK1120:11個未解析的外部程序
我試着回到代碼生成 - >運行時庫設置並嘗試更改庫切換到?MD或/ MT,但沒有任何工作,我仍然得到這些鏈接器錯誤。
請注意,當我創建helloworld.c時,我使用了一個空的Windows控制檯應用程序項目,並且我所做的唯一更改是添加如上所述的ZeroMQ include和lib目錄。我沒有更改任何其他默認項目設置。我猜我錯過了某個地方的項目設置。
我該如何解決這個問題?
另請注意,我通過雙擊自己的解決方案文件構建了ZeroMQ,因此我將它構建爲它自己的獨立解決方案。我的HelloWorld項目在它自己的HelloWorld解決方案中。我是否需要將ZeroMQ庫與HelloWorld一起放入相同的解決方案中才能正確構建它?如果是這樣,我該怎麼做? – Marc
哦,是的,我已經將ZeroMQ lib路徑添加到我的HellowOrld項目(項目 - >參考 - >添加路徑)。我可以添加路徑,但添加新參考窗口彈出並沒有任何內容。 – Marc
好的,我通過將ZeroMQ項目libzmq添加到我的新HelloWorld解決方案中來實現這一目標。我終於可以看到libzmq顯示爲可添加到「添加新參考」窗口中的參考。它現在鏈接正常。如果在VC++中創建解決方案,是否真的如此?您必須在此解決方案中包含外部庫項目以及您自己的用戶項目嗎?這對我來說似乎有點愚蠢。 – Marc