Bug 551860
Summary: | Qyoto.Qt seems to require libqyotoshared.so | ||||||
---|---|---|---|---|---|---|---|
Product: | [Fedora] Fedora | Reporter: | Mamoru TASAKA <mtasaka> | ||||
Component: | kdebindings | Assignee: | Ben Boeckel <fedora> | ||||
Status: | CLOSED ERRATA | QA Contact: | Fedora Extras Quality Assurance <extras-qa> | ||||
Severity: | medium | Docs Contact: | |||||
Priority: | low | ||||||
Version: | 13 | CC: | chkr, fedora, hmandevteam, jreznik, kevin, ltinkl, rdieter, smparrish, than | ||||
Target Milestone: | --- | ||||||
Target Release: | --- | ||||||
Hardware: | All | ||||||
OS: | Linux | ||||||
Whiteboard: | |||||||
Fixed In Version: | 4.3.5-1 | Doc Type: | Bug Fix | ||||
Doc Text: | Story Points: | --- | |||||
Clone Of: | Environment: | ||||||
Last Closed: | 2010-10-05 19:57:14 UTC | Type: | --- | ||||
Regression: | --- | Mount Type: | --- | ||||
Documentation: | --- | CRM: | |||||
Verified Versions: | Category: | --- | |||||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
Cloudforms Team: | --- | Target Upstream Version: | |||||
Embargoed: | |||||||
Bug Depends On: | |||||||
Bug Blocks: | 550601 | ||||||
Attachments: |
|
Description
Mamoru TASAKA
2010-01-02 16:14:17 UTC
OK, some more Qyoto fun. :-( Ben (MathStuf), I think this one is for you too. :-) Does Mono always dlopen the unversioned so? I'm not a C# guru. Is all that's needed a Requires: on Mono or is something more specific necessary? This one is not just a missing Requires, the problem is more subtle: libqyotoshared.so is a devel symlink, but it seems to be needed at runtime. Somehow the C# code in Smoke or Qyoto is looking only for an unversioned library. A workaround would be to put the symlink into the main package. I don't know about mono either, however I also think that currently simplying moving %_libdir/libqyotoshared.so from -devel to main package is better as a workaround. (In reply to comment #3) > This one is not just a missing Requires, the problem is more subtle: > libqyotoshared.so is a devel symlink, but it seems to be needed at runtime. > Somehow the C# code in Smoke or Qyoto is looking only for an unversioned > library. A workaround would be to put the symlink into the main package. Yes, indeed this is just a workaround. ;-) Mono handles it the following way: If a mono assembly should call a function of an external (native) library, it will be referenced in the the c# source using the [DllImport("foo")] directive. Without any further hints the mono runtime environment will search for various variants of "<prefix>foo<suffix>" (especially it will also search for /usr/lib/libfoo.so). This is exact the behaviour which was observered here. This can be fixed in various ways: 1) use the full versioned library name in the DllImport (not very flexible, especially if the mono assembly should run unmodified on various platforms) 2) use *.config files: These files are named like /path/mono-assembly.{exe,dll}.config and help the mono runtime to find the correct library. qyoto seems to be shipped with a .config file: cat /usr/lib/mono/gac/qt-dotnet/4.5.0.0__194a23ba31c08164/qt-dotnet.dll.config <configuration><dllmap dll="libqyotoshared" target="libqyotoshared.so.1"/></configuration> The problem is, that upstream has recently changed their sources and started to use something like this: ./qyoto/src/SmokeMarshallers.cs: [DllImport("qyotoshared", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] This means, that the dllmap in the .config file does not apply anymore: "qyotoshared" as used in DllImport is not that same as "libqyotoshared" in the .config file. And if the mono runtime does not get a hint, it will solely use the algorithm described above. Since the following name will be tried as well: /usr/lib/lib<name_from_dllimport>.so in will find the unversioned libqyotoshared.so link. ;-) I'm not sure whether upstream is aware of this, the described problem is still in their SVN. This problem can be easily solved by changing /usr/lib/mono/gac/qt-dotnet/4.5.0.0__194a23ba31c08164/qt-dotnet.dll.config to something like this (untested): <configuration><dllmap dll="qyotoshared" target="libqyotoshared.so.1"/></configuration> HTH. This bug appears to have been reported against 'rawhide' during the Fedora 13 development cycle. Changing version to '13'. More information and reason for this action is here: http://fedoraproject.org/wiki/BugZappers/HouseKeeping I see this fixed in kdebindings-4.3.5-1 at least, closing. |