views:

15

answers:

1

I have some external dependencies to load with my C++ program, like boost or other libraries. If those .DLL of libraries are not in $PATH, once I run my program I got a "can't load the DLL" error message. To make those .DLL can be load when running my program, I need to add those path to libraries directory. For example:

PATH=$PATH;c:\boost\lib

It works, but I don't like this stupid solution, which makes the global environment dirty. Also, I have lots more dependencies to add. The worst thing to do this way is, once you have different version of dependencies, it is very annoying. e.g. Here you have a project A depends on boost1.3.7, to develop it, you have to change the PATH

PATH=$PATH;c:\boost1.3.7\lib

And, here you need to develop another project B which depends on boost1.4.4, oh, great.... change the variable

PATH=$PATH;c:\boost1.4.4\lib

As you can see, this is not a smart solution.... If you have more than one library to link, that would be a real nightmare. What I want is to modify property of VC++ project, add those path to PATH variable only when running/debugging my program. I have tried to add path to

VC++ Directories -> Executable Directories

But it seems that's PATH for building, not for running. So, how can I add paths to my VC++ project for running my program correctly?

A: 

not sure why you consider adding it to the PATH as a 'stupid' solution? It is a very common solution for 3rd party libs. What if you want to redistribute your application, or just run it from the command line instead of running it under VS?

if you insist on not modifying the global path, you can also try:

  • add the required dlls to the executable's directory (= very messy and error-prone in case of multiple versions and/or multiple build paths)
  • add the reuired dlls to %WINDIR%/system32 (same remark as above)
  • make a batch file that sets the PATH you want, then invoke VS. Now VS uses the PATH you just set, while the global PATH remains unchanged.
  • ou could try getting dlls installed in the WinSxS folders, but that's not so easy. (for example)

btw to get around the versioning problem, use symlinks:

mklink /J c:/boost c:/boost1.3.7

then add just c:/boost to your PATH. If the version changes, change the symlink instead of the environment

stijn