Hello,
When I try to run the CommonQt tutorial by calling the main function, it does not run and I get the following error:
Unable to load foreign library (LIBRARY-904). Error opening shared object "/home/amyn/quicklisp/dists/quicklisp/ software/commonqt-20101207-git/libcommonqt.so": /home/amyn/quicklisp/dists/quicklisp/software/commonqt-20101207-git/ libcommonqt.so: undefined symbol: _ZN5Smoke8classMapE. [Condition of type CFFI:LOAD-FOREIGN-LIBRARY-ERROR]
when i do "c++filt _ZN5Smoke8classMapE" it gives me: Smoke::classMap But I don't understand the problem. I am using clbuild, sbcl and qt 4.7 under archlinux.
Quoting Amyn Bennamane (amynbe@gmail.com):
When I try to run the CommonQt tutorial by calling the main function, it does not run and I get the following error:
Unable to load foreign library (LIBRARY-904). Error opening shared object "/home/amyn/quicklisp/dists/quicklisp/ software/commonqt-20101207-git/libcommonqt.so": /home/amyn/quicklisp/dists/quicklisp/software/commonqt-20101207-git/ libcommonqt.so: undefined symbol: _ZN5Smoke8classMapE. [Condition of type CFFI:LOAD-FOREIGN-LIBRARY-ERROR]
when i do "c++filt _ZN5Smoke8classMapE" it gives me: Smoke::classMap But I don't understand the problem. I am using clbuild, sbcl and qt 4.7 under archlinux.
What version of kdebindings/smoke are you using? Does "ldd libcommonqt.so" show that it links to the right libsmoke*.so files? Are library paths set up so that the linker would also find them at runtime?
d.
Sorry, I am new to mailing lists and forgot to cc the list.
Thank you for the fast answer.
What version of kdebindings/smoke are you using?
4.5.5-1
Does "ldd libcommonqt.so" show that it links to the right libsmoke*.so files?
ldd libcommonqt.so | grep smoke shows nothing
Are
library paths set up so that the linker would also find them at runtime?
I'm not skilled in library stuff so I 'm not sure I will answer as you expect: I have 123 libsmoke*.so files in /usr/lib, that is the folder used in the CommonQt Makefile (in the -L linker option), so I assume the path is correct?
d.
Hi,
Quoting Amyn Bennamane (amynbe@gmail.com):
Sorry, I am new to mailing lists and forgot to cc the list.
Thank you for the fast answer.
What version of kdebindings/smoke are you using?
4.5.5-1
if that means kdebindings from KDE 4.5, it should work. (At least in the sense that it is also the version Debian ships, which mostly works for others.)
Does "ldd libcommonqt.so" show that it links to the right libsmoke*.so files?
ldd libcommonqt.so | grep smoke shows nothing
I can't make sense of that. Either way, ldd would indicate whether the linker could find the smoke libraries or not.
Did compilation actually work?
Are there any compilation warnings if you run: cd commonqt && make clean && qmake && make
Are
library paths set up so that the linker would also find them at runtime?
I'm not skilled in library stuff so I 'm not sure I will answer as you expect: I have 123 libsmoke*.so files in /usr/lib, that is the folder used in the CommonQt Makefile (in the -L linker option), so I assume the path is correct?
Lacking other options, I'd personally try to uninstall the system-provided smoke and compile it manually, just to see whether it makes a difference:
1. git clone git://anongit.kde.org/smokegen cd smokegen cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=/opt/smoke make install cd ..
2. export LD_LIBRARY_PATH=/opt/smoke/lib:$LD_LIBRARY_PATH
3. git clone git://anongit.kde.org/smokeqt cd smokeqt cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=/opt/smoke make install
4. cd /path/to/commonqt make clean qmake LIBS=-L/opt/smoke/lib/ INCLUDEPATH=/opt/smoke/include/ make
Keep in mind that LD_LIBRARY_PATH still needs to be set when invoking the Lisp later.
ldd output for me is then:
------------------------------------------------------------------------ $ ldd libcommonqt.so | grep smoke libsmokeqtcore.so.3 => /opt/smoke/lib/libsmokeqtcore.so.3 (0x00007f7e8d1d9000) libsmokebase.so.3 => /opt/smoke/lib/libsmokebase.so.3 (0x00007f7e8b123000) ------------------------------------------------------------------------
David
2011/1/17 David Lichteblau david@lichteblau.com
Hi,
Quoting Amyn Bennamane (amynbe@gmail.com):
Sorry, I am new to mailing lists and forgot to cc the list.
Thank you for the fast answer.
What version of kdebindings/smoke are you using?
4.5.5-1
if that means kdebindings from KDE 4.5, it should work. (At least in the sense that it is also the version Debian ships, which mostly works for others.)
Does "ldd libcommonqt.so" show that it links to the right libsmoke*.so files?
ldd libcommonqt.so | grep smoke shows nothing
I can't make sense of that. Either way, ldd would indicate whether the linker could find the smoke libraries or not.
Did compilation actually work?
Are there any compilation warnings if you run: cd commonqt && make clean && qmake && make
Are
library paths set up so that the linker would also find them at
runtime?
I'm not skilled in library stuff so I 'm not sure I will answer as you expect: I have 123 libsmoke*.so files in /usr/lib, that is the folder used in the CommonQt Makefile (in the -L linker option), so I assume the path is correct?
Lacking other options, I'd personally try to uninstall the system-provided smoke and compile it manually, just to see whether it makes a difference:
- git clone git://anongit.kde.org/smokegen
cd smokegen cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=/opt/smoke make install cd ..
export LD_LIBRARY_PATH=/opt/smoke/lib:$LD_LIBRARY_PATH
git clone git://anongit.kde.org/smokeqt
cd smokeqt cmake CMakeLists.txt -DCMAKE_INSTALL_PREFIX=/opt/smoke make install
- cd /path/to/commonqt
make clean qmake LIBS=-L/opt/smoke/lib/ INCLUDEPATH=/opt/smoke/include/ make
Keep in mind that LD_LIBRARY_PATH still needs to be set when invoking the Lisp later.
ldd output for me is then:
$ ldd libcommonqt.so | grep smoke libsmokeqtcore.so.3 => /opt/smoke/lib/libsmokeqtcore.so.3 (0x00007f7e8d1d9000) libsmokebase.so.3 => /opt/smoke/lib/libsmokebase.so.3 (0x00007f7e8b123000)
David
Hello, Thanks to your precious help, I solved my problem. It seems the problem was coming from CommonQt side:
First, not important but I needed to mv libcppparser.so to /usr/lib/ to build smokeqt (the 2nd step you mentioned).
Second, still nothing related to smoke in libcommonqt.so. but ldd -r libcommonqt.so outputs [...] undefined symbol: _ZN5Smoke8classMapE (./libcommonqt.so) undefined symbol: _ZN5Smoke15NullModuleIndexE (./libcommonqt.so)
so I see that ldd can tell me which symbols are undefined (yeah newbie here)
Third, checking the Makefile, your ldd output gave me the idea of adding as linker option -lsmokebase along with the already existing -lsmokeqtcore. (So next time added it in commonqt.pro and same effect)
Then it worked, no more undefined symbol in libcommonqt.so and the tutorial runs :D , but note this:
-------------------------------------------------------------------------------------------------------------- $ ldd libcommonqt.so | grep smoke libsmokebase.so.3 => /opt/smoke/lib/libsmokebase.so.3 (0xb78a1000) --------------------------------------------------------------------------------------------------------------
i.e only smokebase appears.
That's all. I wonder why I need to explicitly add smokebase as a shared lib, you may have an idea?
Thanks again.
commonqt-devel@common-lisp.net