Commit d6b5e4efe3f45d95c53a33d15266863eaca17325
1 parent
35cf9eba
static runtime
git-svn-id: svn+q:///qpdf/trunk@790 71b93d88-0707-0410-a8cf-f5a4172ac649
Showing
1 changed file
with
18 additions
and
9 deletions
README.windows
| @@ -35,10 +35,8 @@ directory. You can find the path to it by running | @@ -35,10 +35,8 @@ directory. You can find the path to it by running | ||
| 35 | type -P libgcc_s_dw2-1.dll | 35 | type -P libgcc_s_dw2-1.dll |
| 36 | 36 | ||
| 37 | replacing libgcc_s_dw2-1.dll with whatever gcc DLL is shown, if | 37 | replacing libgcc_s_dw2-1.dll with whatever gcc DLL is shown, if |
| 38 | -different. For an unknown reason, building with -static-libgcc | ||
| 39 | -results in executables that fail their test suites. I'm guessing this | ||
| 40 | -has to do with static data being duplicated between the DLL and the | ||
| 41 | -executable, but I don't really know. | 38 | +different. Redistribution of this DLL is unavoidable as of this |
| 39 | +writing; see "Static Runtime" below for details. | ||
| 42 | 40 | ||
| 43 | From your cygwin prompt, add the absolute path to the libqpdf/build | 41 | From your cygwin prompt, add the absolute path to the libqpdf/build |
| 44 | directory to your PATH. Make sure you can run the qpdf command by | 42 | directory to your PATH. Make sure you can run the qpdf command by |
| @@ -93,8 +91,19 @@ within visual C++, and then click Retry in qpdf. | @@ -93,8 +91,19 @@ within visual C++, and then click Retry in qpdf. | ||
| 93 | 91 | ||
| 94 | A release version of qpdf is built by default. You will probably have | 92 | A release version of qpdf is built by default. You will probably have |
| 95 | to edit msvc.mk to change /MD to /MDd to build a debugging version. | 93 | to edit msvc.mk to change /MD to /MDd to build a debugging version. |
| 96 | -It has also been attempted to build qpdf with /MT, but it does not | ||
| 97 | -pass its test suite in this configuration. I have not investigated. | ||
| 98 | -Perhaps this is the same issue as with -static-libgcc with mingw. In | ||
| 99 | -both cases, statically linking the runtime results in non-working | ||
| 100 | -executables/DLL. | 94 | +Note that you must redistribute the Microsoft runtime DLLs. Linking |
| 95 | +with static runtime won't work; see "Static Runtime" below for | ||
| 96 | +details. | ||
| 97 | + | ||
| 98 | +Static Runtime | ||
| 99 | +============== | ||
| 100 | + | ||
| 101 | +Building the DLL and executables with static runtime does not work | ||
| 102 | +with either Visual C++ .NET 2008 (a.k.a. vc9) using /MT or with mingw | ||
| 103 | +(at least as of 4.4.0) using -static-libgcc. The reason is that, in | ||
| 104 | +both cases, there is static data involved with exception handling, and | ||
| 105 | +when the runtime is linked in statically, exceptions cannot be thrown | ||
| 106 | +across the DLL to EXE boundary. Since qpdf uses exception handling | ||
| 107 | +extensively for error handling, we have no choice but to redistribute | ||
| 108 | +the C++ runtime DLLs. Maybe this will be addressed in a future | ||
| 109 | +version of the compilers. |