my little Qt4Ruby progam failed to run.

i installed *ruby2.1-rubygem-qtbindings package from repo devel_languages_ruby_extensions, and kdebindings-smokegen *package comes from repo *openSUSE-13.2-Update, but these two packages conflicts *with file /usr/bin/smokeapi. i didn’t find any other repos providing these two packages so i had to just ignore the error information , say ‘yes’ to it and then the installation process continued.

> sudo zypper --no-refresh in ruby2.1-rubygem-qtbindings
Loading repository data…
Reading installed packages…
Resolving package dependencies…

The following 5 NEW packages are going to be installed:
kdebindings-smokegen libqwt5 libsmokegen-devel libsmokeqt ruby2.1-rubygem-qtbindings

5 new packages to install.
Overall download size: 5.5 MiB. Already cached: 0 B After the operation, additional 25.2 MiB will be used.
Continue? [y/n/? shows all options] (y):
Retrieving package libqwt5-5.2.3-4.21.x86_64 (1/5), 254.6 KiB (853.2 KiB unpacked)
Retrieving: libqwt5-5.2.3-4.21.x86_64.rpm …[done (70.9 KiB/s)]
Retrieving package kdebindings-smokegen-4.14.3-4.2.x86_64 (2/5), 232.5 KiB (668.2 KiB unpacked)
Retrieving: kdebindings-smokegen-4.14.3-4.2.x86_64.rpm …[done]
Retrieving package libsmokegen-devel-4.14.3-4.2.x86_64 (3/5), 156.5 KiB (456.2 KiB unpacked)
Retrieving: libsmokegen-devel-4.14.3-4.2.x86_64.rpm …[done]
Retrieving package libsmokeqt-4.14.3-4.5.x86_64 (4/5), 2.8 MiB ( 15.7 MiB unpacked)
Retrieving: libsmokeqt-4.14.3-4.5.x86_64.rpm …[done (1.3 MiB/s)]
Retrieving package ruby2.1-rubygem-qtbindings-4.8.6.2-1.3.x86_64 (5/5), 2.1 MiB ( 7.6 MiB unpacked)
Retrieving: ruby2.1-rubygem-qtbindings-4.8.6.2-1.3.x86_64.rpm …[done (77.1 KiB/s)]
Checking for file conflicts: …[error]
Detected 1 file conflict:

File /usr/bin/smokeapi
from install of
kdebindings-smokegen-4.14.3-4.2.x86_64(openSUSE-13.2-Update)
conflicts with file from install of
ruby2.1-rubygem-qtbindings-4.8.6.2-1.3.x86_64(Ruby Extensions (openSUSE_13.2))

File conflicts happen when two packages attempt to install files with the same name but different contents. If you continue, conflicting files will be replaced losing the previous content.
Continue? [yes/no] (no): yes

(1/5) Installing: libqwt5-5.2.3-4.21 …[done]
(2/5) Installing: kdebindings-smokegen-4.14.3-4.2 …[done]
(3/5) Installing: libsmokegen-devel-4.14.3-4.2 …[done]
(4/5) Installing: libsmokeqt-4.14.3-4.5 …[done]
(5/5) Installing: ruby2.1-rubygem-qtbindings-4.8.6.2-1.3 …[done]
Additional rpm output:
update-alternatives: using /usr/bin/smokeapi.ruby2.1-4.8.6.2 to provide /usr/bin/smokeapi (smokeapi) in auto mode
update-alternatives: using /usr/bin/smokeapi.ruby2.1-4.8.6.2 to provide /usr/bin/smokeapi-4.8.6.2 (smokeapi-4.8.6.2) in auto mode
update-alternatives: using /usr/bin/smokeapi.ruby2.1-4.8.6.2 to provide /usr/bin/smokeapi.ruby2.1 (smokeapi.ruby2.1) in auto mode
update-alternatives: using /usr/bin/smokedeptool.ruby2.1-4.8.6.2 to provide /usr/bin/smokedeptool (smokedeptool) in auto mode
update-alternatives: using /usr/bin/smokedeptool.ruby2.1-4.8.6.2 to provide /usr/bin/smokedeptool-4.8.6.2 (smokedeptool-4.8.6.2) in auto mode
update-alternatives: using /usr/bin/smokedeptool.ruby2.1-4.8.6.2 to provide /usr/bin/smokedeptool.ruby2.1 (smokedeptool.ruby2.1) in auto mode
update-alternatives: using /usr/bin/rbrcc.ruby2.1-4.8.6.2 to provide /usr/bin/rbrcc (rbrcc) in auto mode
update-alternatives: using /usr/bin/rbrcc.ruby2.1-4.8.6.2 to provide /usr/bin/rbrcc-4.8.6.2 (rbrcc-4.8.6.2) in auto mode
update-alternatives: using /usr/bin/rbrcc.ruby2.1-4.8.6.2 to provide /usr/bin/rbrcc.ruby2.1 (rbrcc.ruby2.1) in auto mode
update-alternatives: using /usr/bin/rbuic4.ruby2.1-4.8.6.2 to provide /usr/bin/rbuic4 (rbuic4) in auto mode
update-alternatives: using /usr/bin/rbuic4.ruby2.1-4.8.6.2 to provide /usr/bin/rbuic4-4.8.6.2 (rbuic4-4.8.6.2) in auto mode
update-alternatives: using /usr/bin/rbuic4.ruby2.1-4.8.6.2 to provide /usr/bin/rbuic4.ruby2.1 (rbuic4.ruby2.1) in auto mode
update-alternatives: using /usr/bin/rbqtapi.ruby2.1-4.8.6.2 to provide /usr/bin/rbqtapi (rbqtapi) in auto mode
update-alternatives: using /usr/bin/rbqtapi.ruby2.1-4.8.6.2 to provide /usr/bin/rbqtapi-4.8.6.2 (rbqtapi-4.8.6.2) in auto mode
update-alternatives: using /usr/bin/rbqtapi.ruby2.1-4.8.6.2 to provide /usr/bin/rbqtapi.ruby2.1 (rbqtapi.ruby2.1) in auto mode

then i wrote a little qt4ruby program ,but failed to run.


require 'Qt4'
class MyWidget < Qt::Widget
  def initialize(parent=nil)
    super(parent)
  end
end
app = Qt::Application.new(ARGV)
widget = MyWidget.new
widget.show
app.exec

error informations follows:

/usr/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /home/bruce/RubymineProjects/RubyStudy/qt4ruby.rb
/usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': libqtruby4shared.so.2: cannot open shared object file: No such file or directory - /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/qtruby4.so (LoadError)
    from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/Qt4.rb:17:in `&lt;top (required)&gt;'
    from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `require'
    from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
    from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'
    from /home/bruce/RubymineProjects/RubyStudy/qt4ruby.rb:1:in `&lt;top (required)&gt;'
    from -e:1:in `load'
    from -e:1:in `&lt;main&gt;'


Process finished with exit code 1


i also tried to run */usr/bin/smokeapi *and got a similar error.

/usr/bin/smokeapi
/usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require': libqtruby4shared.so.2: cannot open shared object file: No such file or directory - /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/qtruby4.so (LoadError) from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require’
from /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/Qt4.rb:17:in &lt;top (required)&gt;' from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require’
from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require' from /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/Qt.rb:1:in <top (required)>’
from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require' from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in require’
from /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/bin/smokeapi:4:in &lt;top (required)&gt;' from /usr/bin/smokeapi:23:in load’
from /usr/bin/smokeapi:23:in `<main>’

please help me out, thanks in advance!

Hi
Why use no refresh? Suggest you try refreshing your repostories and then run zypper ve to see what’s up.

some openSUSE repos including openSUSE update are not stable for a long time. i can not access these repos frequently, so i usually prefer manually refresh.
and as you recommended, i refresh all my repos and do it again. unluckily the problem remains.

On Sat 18 Jul 2015 07:26:01 PM CDT, redhatlinux10 wrote:

malcolmlewis;2720009 Wrote:
> Hi
> Why use no refresh? Suggest you try refreshing your repostories and
> then run zypper ve to see what’s up.
some openSUSE repos including openSUSE update are not stable for a long
time. i can not access these repos frequently, so i usually prefer
manually refresh.
and as you recommended, i refresh all my repos and do it again.
unluckily the problem remains.

Hi
And what about the output from zypper ve?


Cheers Malcolm °¿° LFCS, SUSE Knowledge Partner (Linux Counter #276890)
SUSE Linux Enterprise Desktop 12 GNOME 3.10.1 Kernel
3.12.43-52.6-default If you find this post helpful and are logged into
the web interface, please show your appreciation and click on the star
below… Thanks!

First, although you should generally refresh your repos before installing, in this case it’s probably unlikely it has anything to do with your issue.

When you see an error with a line like the following in your stdout

/usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require':** libqtruby4shared.so.2**: cannot open shared object file: No such file or directory - 

You’re being clearly told that a “required” file is missing, so you should look for what provides that file

You can look in the following places (I recommend the following order)

  1. The following will search your existing configured repositories
zypper se --provides *missingfileorpackage *
  1. The following will search all openSUSE repos and private repos on OBS
    https://software.opensuse.org
  2. You can also do an RPM search on the Internet
  3. As a last resort, if a Fedora RPM exists, you can try it.

For your specific problem, the first option above should return a result. Install that package and see if the error is thrown again.
If necessary, update your system with the following command to ensure everything is sync-d up properly

zypper up

TSU

@tsu2

file libqtruby4shared.so.2 is already included in package ruby2.1-rubygem-qtbindings


> rpm -ql ruby2.1-rubygem-qtbindings|grep -i libqtruby4shared.so.2
/usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/libqtruby4shared.so.2
/usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/libqtruby4shared.so.2.0.0

file qtruby4.so also exists


> file /usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/qtruby4.so
/usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/qtruby4.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c74239ad20fb69c87ce5495bf69d27ad7700cdeb, stripped


>rpm -ql ruby2.1-rubygem-qtbindings|grep -i qtruby4.so
/usr/lib64/ruby/gems/2.1.0/gems/qtbindings-4.8.6.2/lib/2.1/qtruby4.so


> export LANG=c
> sudo zypper -v  ve
Verbosity: 1
Initializing Target
Checking whether to refresh metadata for AMD/ATI-FGLRX
Checking whether to refresh metadata for Google-Chrome
Checking whether to refresh metadata for Additional packages maintained by the KDE team (openSUSE_13.2)
Checking whether to refresh metadata for M17N
Checking whether to refresh metadata for M17N:fonts
Checking whether to refresh metadata for videolan-SuSE
Checking whether to refresh metadata for devel:languages:haskell
Checking whether to refresh metadata for devel:languages:pascal
Checking whether to refresh metadata for devel:languages:python
Checking whether to refresh metadata for Ruby Extensions (openSUSE_13.2)
Checking whether to refresh metadata for home:Reki
Checking whether to refresh metadata for home:X0F
Checking whether to refresh metadata for home:diamond_gr:Square-icon-theme
Checking whether to refresh metadata for home:gmg137
Checking whether to refresh metadata for home:lemmy04
Checking whether to refresh metadata for home:snwh:moka-project
Checking whether to refresh metadata for home:the-axon
Checking whether to refresh metadata for Lazy_Kent's Home Project (openSUSE_13.2)
Checking whether to refresh metadata for ecsos's Home Project (openSUSE_13.2)
Checking whether to refresh metadata for openSUSE for Chinese Users Project (openSUSE_13.2)
Checking whether to refresh metadata for bcloud for openSUSE (openSUSE_13.2)
Checking whether to refresh metadata for Opera packages (openSUSE_13.2)
Checking whether to refresh metadata for network
Checking whether to refresh metadata for openSUSE-oss-aliyun-mirrors
Checking whether to refresh metadata for openSUSE:13.2
Checking whether to refresh metadata for packman
Checking whether to refresh metadata for openSUSE-13.2-Non-Oss
Checking whether to refresh metadata for openSUSE-13.2-Oss
Checking whether to refresh metadata for openSUSE-13.2-Update
Checking whether to refresh metadata for openSUSE-13.2-Update-Non-Oss
Checking whether to refresh metadata for all the small tools for the shell (openSUSE_13.2)
Loading repository data...
Reading installed packages...
Force resolution: No
Verifying dependencies...
3 Problems:
Problem: nothing provides /usr/sbin/alternatives needed by jdk1.8.0_40-2000:1.8.0_40-fcs.x86_64
Problem: nothing provides /usr/sbin/alternatives needed by jdk1.8.0_45-2000:1.8.0_45-fcs.x86_64
Problem: nothing provides appdata(firefox.appdata.xml) needed by application:Firefox-.noarch


Problem: nothing provides /usr/sbin/alternatives needed by jdk1.8.0_40-2000:1.8.0_40-fcs.x86_64
 Solution 1: deinstallation of jdk1.8.0_40-2000:1.8.0_40-fcs.x86_64
 Solution 2: break jdk1.8.0_40-2000:1.8.0_40-fcs.x86_64 by ignoring some of its dependencies


Choose from above solutions by number or skip, retry or cancel [1/2/s/r/c] (c): 2
Applying solution 2


Problem: nothing provides /usr/sbin/alternatives needed by jdk1.8.0_45-2000:1.8.0_45-fcs.x86_64
 Solution 1: deinstallation of jdk1.8.0_45-2000:1.8.0_45-fcs.x86_64
 Solution 2: break jdk1.8.0_45-2000:1.8.0_45-fcs.x86_64 by ignoring some of its dependencies


Choose from above solutions by number or skip, retry or cancel [1/2/s/r/c] (c): 2
Applying solution 2


Problem: nothing provides appdata(firefox.appdata.xml) needed by application:Firefox-.noarch
 Solution 1: deinstallation of application:Firefox-.noarch
 Solution 2: break application:Firefox-.noarch by ignoring some of its dependencies


Choose from above solutions by number or skip, retry or cancel [1/2/s/r/c] (c): 1
Applying solution 1
Resolving dependencies...
Force resolution: No
Verifying dependencies...


The following application is going to be REMOVED:
  Firefox  




No additional space will be used or freed after the operation.
Dependencies of all installed packages are satisfied.

IIRC the complaint about jdk1.8.0_40-2000:1.8.0_40-fcs.x86_64 package is actually caused by this package itself, because openSUSE doesn’t have /usr/sbin/alternatives. in fact i use openSUSE’s /usr/sbin/update-alternatives to manage jdk’s version and it works very well. so i chose solution 2.

i am a little confused by the complaint about application:Firefox-.noarch. it seems to be an invalid package name and in fact there is not any package with this name installed.


> rpm -qa|grep -i firefox
MozillaFirefox-39.0-34.2.x86_64
MozillaFirefox-translations-common-39.0-34.2.x86_64
MozillaFirefox-branding-openSUSE-21-4.1.2.x86_64

so i chose solution 1
it prompted me that FireFox package will be removed, actually it didn’t do that.

You broke this package with the following decision during your install

File /usr/bin/smokeapi
from install of
kdebindings-smokegen-4.14.3-4.2.x86_64(openSUSE-13.2-Update)
conflicts with file from install of
ruby2.1-rubygem-qtbindings-4.8.6.2-1.3.x86_64(Ruby Extensions (openSUSE_13.2))


File conflicts happen when two packages attempt to install files with the same name but different contents. If you continue, conflicting files will be replaced losing the previous content.
Continue? [yes/no] (no): yes

You need to re-install your qtbindings package.
I can’t speculate on how to resolve your package conflicts without close and detailed inspection.
If you’d like to instead try installing and running your app using Ruby installed from the official ruby repos, the following is a link to the wiki article I wrote describing how to do this using rbenv as the Ruby version manager
https://en.opensuse.org/User:Tsu2/Install_Ruby
If you do install Ruby using rbenv as I described, it’s easy to undo if you want… just delete the rbenv folder with all its contents (which will also remove the downloaded Ruby) and remove the file I describe creating in /etc/profile.d/, then reboot.

TSU

as i have said, i didn’t find any other repos on software.opensuse.org providing these two packages so i had to just ignore the error information.

my ruby installation is built in openSUSE 13.2, it comes from openSUSE official repo. i prefer offical ruby package from openSUSE because i not sure whether packages from other locations are compatible with yast, as i know, yast is written with ruby now. and the most important one is that why do you think this situation is caused by ruby itself, it seems to be more related to qtbindings gem.
i also have tried to install qtbindings from rubgems.org with command gem install qtbindings but failed, because there is no binary package for linux platform ,you can come to this conclusion by reading https://rubygems.org/gems/qtbindings
i will try rbenv, but i have a question, what location will rbenv get qtbindings package from ?

ruby2.1-rubygem-qtbindings conflicts with kdebindings-smokegen, i think this is a bug and should be fixed.

You can’t just ignore a notification, you need to think through the consequences of a decision. It may be that there is no resolution given the packages provided by openSUSE to install smokegen and qtbindings and that is why I also mentioned the option to install Ruby from the official ruby repos instead… I don’t know if the smokegen and qtbindings provided by the Ruby repos work better together, it’s only a try.

If you decide to try installing Ruby from the Ruby repos, it’s a low/no risk try since

  • I’ve already verified that the latest Ruby provided by those repos (2.2.2) at this writing don’t cause a problem running any YAST and YAST applets I’ve run so far.
  • My wiki instructions describe deploying rbenv. Whether you use rbenv or rvm, you should choose one of the two so that you have full control of your Ruby version control. For any Ruby downloaded and managed by these 2 version managers, you can set them to be applied globally (ie the default system ruby), locally (only the Ruby app in a specific file tree. Everything else is left running the system default), or shell (a specific console). So, there really isn’t any need to fear running Ruby from the Ruby repos if you wish to do so.
  • If you decide to remove Ruby from the repos and return to the Ruby installed by openSUSE, it’s simple to do so, just delete the rbenv folder and its contents (which would include all downloaded Ruby and gems), delete the described file in /etc/profile.d/ and reboot. Very simple and easy to do.

TSU

finally i uninstalled ruby2.1-rubygem-qtbindings and installed ruby-qt4.
there is no file conflicts and my little program runs well.
thanks for all your replies !

Thx for reporting your solution.
In retrospect, your solution is logical… For your app you need a particular library that is provided 2 ways, one of the ways causes a conflict.
So, utilize the remaining non-conflict way.

TSU