stevengj / NLoptBuilder

binary builder for NLopt.jl package
Other
5 stars 2 forks source link

Windows dependencies #1

Open pchilds opened 5 years ago

pchilds commented 5 years ago

libnlopt.dll has runtime dependencies of "libgcc_s_seh-1.dll", "libstdc++-6.dll", "kernel32.dll", and "msvcrt.dll". Would it be possible to change the build so that the former two are compiled in statically or to distribute them in the .tar.gz archives in order to ease deployment? At the moment the dll will not load as is.

stevengj commented 5 years ago

@staticfloat, is there a trick to do this with BinaryBuilder?

staticfloat commented 5 years ago

You could, but that would then cause them to not play well with being loaded within Julia; those libraries are shipped by Julia, and are already loaded when you start Julia, so opening libnlopt.dll within Julia should auto-load those libraries as well. If you were to statically link them in, you may get symbol conflicts, which may be harmless in most cases, but could cause problems if the version of libgcc_s_seh-1.dll or libstdc++-6.dll changes drastically between your binary and the version Julia loads.

What problems are you seeing right now? Is it a problem with dlopen()'ing libnlopt.dll, or do you have an external binary that links against libnlopt.dll that won't run?

stevengj commented 5 years ago

Ah, the problem is people who are trying to use the NLoptbuilder binaries from outside of Julia, I think, since I linked to them from the main NLopt documentation

staticfloat commented 5 years ago

Ah, in that case, we just need to extract the compiler support libraries from BinaryBuilder and make it easy for people to extract those into the same location as libnlopt. You can get the CSLs from the appropriate tarball here; https://github.com/JuliaPackaging/Yggdrasil/releases/tag/CompilerSupportLibraries-v0.1.4-0