Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reason: Incompatible library version #290

Open
criarth opened this issue Apr 3, 2024 · 1 comment
Open

Reason: Incompatible library version #290

criarth opened this issue Apr 3, 2024 · 1 comment

Comments

@criarth
Copy link

criarth commented Apr 3, 2024

Hello, can anyone help me solve this problem on my macOs BigSur (Intel)? "Reason: Incompatible library version: Python requires version 13.0.0 or later, but libintl.8.dylib provides version 12.0.0"

@mteep
Copy link

mteep commented Apr 18, 2024

Well, at least I know of a hack that can fix this in some circumstances. But the simplest solution is probably to ensure that the Python version you try to use with Inkscape extensions (including Inkscape-Silhouette) is the same as that included with Inkscape, currently 3.10.13.

The error message I got was slightly longer and actually incorrect. But I'm pretty sure it's the same issue. (Since you're on BigSur, you probably don't want to use Homebrew since it now will build everything from source in an incredibly inefficient way. I've switched to MacPorts, and it works a lot better for older OS:es.)

I haven't yet had time to fully investigate how Inkscape loads the extensions, but the issue is that Inkscape itself includes libintl.8.dylib version 12 (actually twice). Apparently it then tries to load a newer Python version in the same process, which requires version 13 of that same library. But dyld, the dynamic linker, cannot normally load two libraries with the same "leaf name" in a single process. Instead, it tries to reuse the already loaded library, but fails with roughly that error message.

Note that the library file that the error message specifies, in my case with a fully qualified path, might very well be of the correct version. It's just that it won't get loaded if there's already a loaded library with the same leaf name. (The version of a dynamic library, and its dependencies, can be viewed by running otool -L <path-to-lib>. It also works on executables.)

Without changing how Inkscape handles extensions, the correct way to solve this is to upgrade the version of libintl.8.dylib that Inkspace uses. Unfortunately, seemingly due to signing, it isn't easy to do yourself.

The hack I mentioned instead involved renaming the library that Python uses. To minimize possible issues, the name shouldn't be longer than the existing name, say libintl.H.dylib (H for hack). Then, the so-called install ID of the library should be changed to match, and also the dependencies on that library in the framework library (Python.framework/Versions/3.xx/Python) and the Python executable. This can be done using the install_name_tool command, with the -id and -change flags, respectively.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants