Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linking a static library to my project on Visual Studio 2010

I want to use oscpack (http://code.google.com/p/oscpack/) as a static library for my project but when I try to add it to an example, I get linking errors, for example:

1>oscpackd.lib(UdpSocket.obj) : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function "public: __thiscall UdpSocket::Implementation::Implementation(void)" (??0Implementation@UdpSocket@@QAE@XZ)

1>oscpackd.lib(UdpSocket.obj) : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function "public: __thiscall UdpSocket::Implementation::~Implementation(void)" (??1Implementation@UdpSocket@@QAE@XZ)

...

Basically, I created a solution for building the oscpack.lib, in the project I added the corresponding .h and .cpp files.

Then on the example solution, I added my main.cpp and then I included (properties>C/C++>Additional Include Directories) the folder of the oscpack library, then on the Linker tab I added the folder location of the libs and the name of the libs.

like image 930
JohnnyAce Avatar asked Apr 06 '12 21:04

JohnnyAce


1 Answers

Right-click your project in the Solution Explorer window and click Properties > Linker > Input > Additional Dependencies setting. You'll have to add ws2_32.lib.

The VS project templates take care of telling the linker to link the most common Windows libraries. Like kernel32.lib, you cannot write a Windows program without it. But not winsock, not every program is going to want to create a socket. That has to be added explicitly.

You can find these kind of dependencies from the MSDN article about, say, closesocket(). It is at the bottom of the article. The Header bit tells you what you need to #include, you got that right. The Library bit tells you what you need to tell the linker to link. Not automatic, you have to take care of it yourself.

like image 175
Hans Passant Avatar answered Nov 15 '22 07:11

Hans Passant