The Beruriah Incident
The Beruriah Incident

Reputation: 3257

How to package C++ with dlls and libraries

I'm wondering how to "package" a C++ project for release. It uses various libraries, and I don't want a user to have to go through the same setup I did, with putting the right files in the right place and such. I had difficulty researching this, because I'm not sure the technical term for this issue. If I'm using command line compiling on Linux, is there an easy way to do this?

Upvotes: 9

Views: 3934

Answers (3)

Eric Y
Eric Y

Reputation: 1697

Your approach to this will differ on Windows and Linux because each OS handles this a different way. I'm more familiar with Linux so I'll restrict my answer to just the Linux side of things.

When you link your executable with a library using -l flag the linker defaults to looking in the normal system library directories so there are four approaches here.

  1. Require the user to properly install the libraries themselves. However, it sounds like you don't want to do that.

  2. Have the user add the library location to LD_LIBRARY_PATH variable.

  3. Your third option is force the linker to look in a certain path for the libraries using the -rpath flag. For example, to have the application look in its working directory for a shared library you can compile with: g++ -rpath ./ -l SomeLib -o MyApp myapp.cpp

  4. One other option is to static link your code with their library that way you only have to distribute one executable. If a static library exists you can use g++ -static -l SomeLib -o MyApp myapp.cpp to tell gcc to link statically.

Upvotes: 6

chris g.
chris g.

Reputation: 162

On windows I would recommand wix http://wix.sourceforge.net/ to create the .msi installer I would like to point out, the lookup path for .dlls I recommand putting all .dll in the same folder as your .exe since this has the highest priority

However, the vc crt (the c/c++ runtime library) should be installed using the redistributional package from microsoft -> updates automatically http://www.microsoft.com/de-de/download/details.aspx?id=5555

Wix can include the redistributional package into the same .msi therefore you have only to deploy a single installer file.

Upvotes: 2

Martin Beckett
Martin Beckett

Reputation: 96109

You mean an installer?
On Windows the program that you run to install a new app which outs everything in the correct directory, creates the start menu and lets you un-install it?

There is an installer builder in Visual Studio (might not be in the free express version) which makes .msi installer files. It's fairly easy to use for simple tasks but becomes complicated to do anything more.

Alternatively, to create traditional setup.exe type installs I use the excellent free Innosetup

On linux you would generally create a package using whatever format your distribution uses (.deb / .rpm ). There are lots of instructions on the specifics of each one and the tools to do so will probably already be installed in your Linux system

Upvotes: 1

Related Questions