Sunday, July 7, 2013

Build libssh2 on Visual Studio 2010

//

In this post I'd like to show you few easy steps how to build libssh2 library with Microsoft Visual Studio 2010.

Recently I started a project which require SSH connection to a server. I've tried few libraries which provide SSH support and libssh2 seems to feet my need the best. It's portable, easy to work with (even the documentation is not great) and has a SSH client support.

Unfortunately the libssh2 comes only as a source code, but fortunately it's very easy to build. The setup I'm using is Microsoft Visual Studio 2010 on Windows 7 64bit.

Even I'm on 64 bit machine I'll build 32 bit version of libssh2. It's easier that way.

Download the sources


First we have to download the sources. The current version is 1.4.3 and can be downloaded from libssh2 website here.

Next in Visual Studio, File->Open->Project/Solution and navigate to libssh-1.4.3\win32. Open libssh2.dsw. The Visual Studio will ask to convert it to 2010 workspace file format. Say YES.

After the it is converted there should be 2 projects in the workspace:

  • libssh2 - the library

  • tests - asimple test application which uses the libssh2 library file created by libssh2 project.


Additional libraries needed



  • openssl can be downloaded from here

  • zlib an be downloaded from here


Both have to be 32 bit as we are going to build 32 bit version of the libssh2.

Build


First thing first - build the library



  1. On the libssh2 project properties C/C++->General->Additional Include Directories add '<path to openssl>\include'.

  2. Go to libssh2_priv.h(43) and comment out the line [sourcecode language="plain"]#define LIBSSH2_LIBRARY[/sourcecode]

  3. libssh2 project properties C/C++->Preprocessor->Preprocessor Definitions and add 'LIBSSH2_LIBRARY'.


 Build the 'test' project

  1. test project properties Linker->General->Output File replace with '%(OutputFile)'

  2. test project properties Linker->General->Additional Library Directories add:

    • '<path to openssl>\lib'

    • '<path to zlib>\static32'. Make sure you rename 'zlibstat.lib' to 'zlib.lib' within this folder as we reference to 'zlib'lib.

    • <path to libssh2.lib>. In my case it is '.\Debug_lib'.



  3. test project properties Linker->Input->Additional Dependencies add zlib.lib and libeay32.lib.

  4. test project properties Debugging->Command and change to '$(OutputPath)\$(TargetFileName)'

  5. test project properties Debugging->Working Directory and change to '$(OutputPath)'

  6. Now if you build you'll probably get:


[sourcecode language="plain"]
simple.obj : error LNK2019: unresolved external symbol __imp__libssh2_exit referenced in function _main
simple.obj : error LNK2019: unresolved external symbol __imp__libssh2_session_free referenced in function _main
simple.obj : error LNK2019: unresolved external symbol __imp__libssh2_session_init_ex referenced in function _main
simple.obj : error LNK2019: unresolved external symbol __imp__libssh2_init referenced in function _main
simple.obj : error LNK2019: unresolved external symbol __imp__libssh2_base64_decode referenced in function _test_libssh2_base64_decode
[/sourcecode]

Go to 'test' project properties C/C++->Preprocessor->Preprocessor Definitions and remove 'LIBSSH2_WIN32'

That's it. Build and Enjoy.

Subscribe for our NewsLetter!

19 comments:

  1. Hello,

    >> zlib an be downloaded from >>here<< <-- link to zlib binaries is invalid and referes to libssh sources.

    Thanks for the article!

    ReplyDelete
  2. Hi Evgeny,

    I'm sorry for the issue. The link is fixed now.
    Thank you for reporting!

    Cheers,
    Nikolay

    ReplyDelete
  3. Is it possible to make Windows Form Application using libssh? I'm trying to do that and i have many issues

    ReplyDelete
  4. A few minor corrections I noticed (using VS2013 if that makes a difference):

    1) It should be 'zlibstat.lib' not 'zlib.lib'
    2) Command can be: $(TargetPath)
    3) Directory to run from should be: $(ProjectDir)\Release (if running in release)

    ReplyDelete
  5. Thanks for the information!

    ReplyDelete
  6. i can't open it in vs2010 it says that libssh2 is targeted to .net framework version =V4
    but i installed .net framework version 4.0.3019 can you help me

    ReplyDelete
  7. This comment has been removed by the author.

    ReplyDelete
  8. Thanks for the excellent post!

    I was able to build both projects successfully. However, I get an "error LNK1104: cannot open file 'libssh2d.lib' " if I try to build the 2 projects together as a solution.

    I get this even after adding the Debug_lib library which has the libssh2d.lib file in it.

    Just wanted to know if you see something similar if you build solution instead of individual projects.

    ReplyDelete
    Replies
    1. You may need to add "libssh2d.lib":
      Linker->Input->Additional Dependencies. (and possibly "ws2_32.lib", if you get winsock related link errors).
      Also make sure you have "Debug_lib" added in:
      Linker->General->Additional Library Directories

      Delete
    2. Right, I was missing that. Thanks!

      Delete
  9. Hi Daniel. This is exactly the issue I am facing. Were you able to resolve it on your end? Thanks.

    ReplyDelete
  10. Please can you tell , how to build libssh2 for 64 bit

    ReplyDelete
    Replies
    1. Did you try to build it and link it vs. 64bit version of the libraries?
      BTW. Whay you need 64bit?... 32 should be sufficient in most cases.

      Delete
  11. I have the exact same problem now... did someone solve it? Thanks!

    ReplyDelete
  12. solved it finally. It worked out for me to set multiple start projects in the workspace. I set the libssh2 as start project with no action and the tests project with the Starting action.

    ReplyDelete
  13. Not sure exactly what is the case, but it looks like you try to build Release version of the executable (using libssh2.lib), but you have build debug version of the library libssh2d.lib. Try to build the executable debug version, or provide release version of the libssh library.

    ReplyDelete
  14. The established and reputable licensing authorities impose a strict code of conduct on the licensees, who've to adhere 룰렛 to the necessary laws if they're to take care of up} their licenses. The strict and ranging legal guidelines across the nations are doubtless to|prone to} problem the market development. She has gotten used to the uncertainty of wondering whether or not a caller starts playing again 5 minutes later or goes to therapy and lives happily ever after.

    ReplyDelete
  15. Gambling is usually outlined because the act of betting cash on end result of|the results of} a sport or the prediction of an unsure consequence. When customers buy the chance of successful an merchandise with out actual value, cash just isn't being risked in any respect. Users don't buy these digital gadgets (i.e., coins to play a roulette game) to earn a profit, but for entrainment purpose only. Hence, reality that|the truth that} a web-based consumer purchases the chance to win a 먹튀검증 prize randomly selected should not be sufficient suppose about|to contemplate} that in-game characteristic as on-line gambling. This should be true, provided is not a|there is not any} cash nor priceless and tradable items involved, to ensure customers don't earn any profit out from them. Once you’ve explored every little thing your chosen on-line on line casino has to supply, it’ll be time to benefit of|benefit from|reap the advantages of} its large library of video games.

    ReplyDelete