Re: What is swipl's default DLL search path on Windows?
Jan Wielemaker <[email protected]>
| Newsgroups | gmane.comp.ai.prolog.swi |
|---|---|
| Message-ID | <[email protected]> |
On 02/01/2014 07:06 AM, Haitao Zhang wrote: > I am compiling an extension that depends on libgcc and libstdc++. I get > module not found errors for libgcc and libstdc++ when use_foreign_library > even though the DLLs are in the first directory of the PATH. If I compile > with -static-libgcc and -static-libstdc++ the errors go away. > > I wonder if swipl controls where the DLLs are searched for or if this is > controlled by Windows? That is a very difficult story. The best pointer into it is http://www.swi-prolog.org/pldoc/doc_for?object=win_add_dll_directory/2 The intend is that use_foreign_library/1 uses absolute_file_name/3 to locate the target and calls LoadLibraryEx() such that this also searches in the directory of the DLL for dependencies. If Prolog cannot find the file using absolute_file_name/3, it just calls LoadLibraryEx() using the base name of the file and leaves the search entirely to the OS. What really happens depends on the Windows version. Study LoadLibraryEx() and the source code if you want to understand all the details. The docs contain so many `if's that it is hard to tell a clear story. > Another observation: when using swipl-ld I must specify at least one .c or > .cc file. I can't seem to just use it to invoke the linker on .o files > only. I can work around by observing the -v output and invoke the gcc/g++ > myself but it seems that one should be able to use swipl-ld for linking > only? Also if one specifies g++ to be the compiler the default linker is > still gcc. But if one specifies g++ to be the linker the compiler gets set > to be g++ as well. Seems like a dubious feature. Please consider submitting a patch. Sources are in src/swipl-ld.c. Sorry for the somewhat unclear answer Cheers --- Jan