On Fri, Oct 06, 2006 at 06:29:47PM +0200, Kurt Roeckx wrote:
> On Fri, Oct 06, 2006 at 04:03:42PM +0200, Carlo Wood wrote:
> > 
> > The problem here is that -ldl appears before
> > /usr/local/install/4.1.2-20060901/lib/libcwd.so
> 
> Where does that -ldl come from?

That is detailed explained in the my first post??

Repeat: ../libltdl/libltdlc.la pulls it in.
The first post contains a full copy of this file.

> Does only libcwd need the -ldl, or does something else need -ldl too?

See original post/above: ../libltdl/libltdlc.la

> What happens if the -ldl isn't on the command line at all?

I gave the command line in my first post, there is no -ldl
on the command line! :/

Repeat:

/bin/sh ../libtool --tag=CXX --mode=link g++  -g -DCWDEBUG
  -I/usr/local/install/4.1.2-20060901/include -W -Wall -Wundef -DDEBUG
  -I"/usr/include/boost-1_33_1"  -export-dynamic -o edragon
  -export-dynamic -no-undefined
  -Wl,--whole-archive,utils/.libs/libutils.a,--no-whole-archive
  edragon-Application.o edragon-GUI_interface.o edragon-IniFile.o
  edragon-PathList.o edragon-PluginFile.o edragon-PluginsManager.o
  edragon-RCFile.o edragon-Runtime.o edragon-XMLFile.o
  edragon-testsuite_hooks.o ../libltdl/libltdlc.la
  -L/usr/local/install/4.1.2-20060901/lib -lcwd
  -lboost_filesystem-gcc-d-1_33_1 -L/usr/local/install/4.1.2-20060901/lib
  -lcairo   -L/usr/local/install/4.1.2-20060901/lib -lglib-2.0
  -L/usr/local/install/4.1.2-20060901/lib -lxmlwrapp -lxsltwrapp -lxslt
  -lxml2   -L/usr/local/install/4.1.2-20060901/lib -lcw

(All of that is on one line).
There is no -ldl there.

> Can you show the output the objdump -p file |grep NEEDED for 
> libcwd and the application?  And the output from ldd file for
> the application?

I don't see how NEEDED is relevant here. The only thing that
is relevant are the .la files involved (which were included
in my first post). But ok here is the requested info:

~/projects/edragon/edragon-objdir-bugreport/src>ldd edragon
        linux-gate.so.1 =>  (0xffffe000)
        libdl.so.2 => /lib/tls/libdl.so.2 (0xa7f68000)
        libcwd.so.0 => /usr/local/install/4.1.2-20060901/lib/libcwd.so.0 
(0xa7eb4000)
        libboost_filesystem-gcc-d-1_33_1.so.1.33.1 => 
/usr/lib/libboost_filesystem-gcc-d-1_33_1.so.1.33.1 (0xa7e9f000)
        libcairo.so.2 => /usr/local/install/4.1.2-20060901/lib/libcairo.so.2 
(0xa7e3f000)
        libglib-2.0.so.0 => 
/usr/local/install/4.1.2-20060901/lib/libglib-2.0.so.0 (0xa7dae000)
        libxmlwrapp.so.0 => 
/usr/local/install/4.1.2-20060901/lib/libxmlwrapp.so.0 (0xa7d8c000)
        libxsltwrapp.so.0 => 
/usr/local/install/4.1.2-20060901/lib/libxsltwrapp.so.0 (0xa7d83000)
        libxslt.so.1 => /usr/lib/libxslt.so.1 (0xa7d51000)
        libxml2.so.2 => /usr/lib/libxml2.so.2 (0xa7c38000)
        libcw.so.0 => /usr/local/install/4.1.2-20060901/lib/libcw.so.0 
(0xa7be8000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xa7b09000)
        libm.so.6 => /lib/tls/libm.so.6 (0xa7ae4000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xa7ad8000)
        libc.so.6 => /lib/tls/libc.so.6 (0xa79a6000)
        /lib/ld-linux.so.2 (0xa7f7e000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0xa799d000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0xa7985000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xa797d000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xa78b6000)
        libpng12.so.0 => /usr/lib/libpng12.so.0 (0xa7891000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xa7827000)
        libz.so.1 => /usr/lib/libz.so.1 (0xa7813000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xa77e9000)
        libexslt.so.0 => /usr/lib/libexslt.so.0 (0xa77d8000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xa77d4000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xa77cf000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0xa77b0000)
        libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0xa775f000)
        libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0xa775b000)
        libnsl.so.1 => /lib/tls/libnsl.so.1 (0xa7744000)

~/projects/edragon/edragon-objdir-bugreport/src>objdump -p 
/usr/local/install/4.1.2-20060901/lib/libcwd.so.0 | grep NEEDED
  NEEDED      libdl.so.2
  NEEDED      libstdc++.so.6
  NEEDED      libm.so.6
  NEEDED      libc.so.6
  NEEDED      libgcc_s.so.1

~/projects/edragon/edragon-objdir-bugreport/src>objdump -p ./edragon | grep 
NEEDED
  NEEDED      libdl.so.2
  NEEDED      libcwd.so.0
  NEEDED      libboost_filesystem-gcc-d-1_33_1.so.1.33.1
  NEEDED      libcairo.so.2
  NEEDED      libglib-2.0.so.0
  NEEDED      libxmlwrapp.so.0
  NEEDED      libxsltwrapp.so.0
  NEEDED      libxslt.so.1
  NEEDED      libxml2.so.2
  NEEDED      libcw.so.0
  NEEDED      libstdc++.so.6
  NEEDED      libm.so.6
  NEEDED      libgcc_s.so.1
  NEEDED      libc.so.6

~/projects/edragon/edragon-objdir-bugreport/src>./edragon
COREDUMP: libcwd:cwbfd::ST_init: dlsym(RTLD_NEXT, "dlopen") returns NULL; 
please check that you didn't specify -ldl before (left of) -lcwd while linking.

Obviously "NEEDED libdl.so.2" appears before "NEEDED libcwd.so.0",
because the g++ command generated by libtool erroneously
puts -ldl in front of libcwd.

Repeat of the g++ command generatd by libtool:

g++ -g -DCWDEBUG -I/usr/local/install/4.1.2-20060901/include -W -Wall -Wundef
   -DDEBUG -I/usr/include/boost-1_33_1 -o edragon
   -Wl,--whole-archive -Wl,utils/.libs/libutils.a -Wl,--no-whole-archive
   edragon-Application.o edragon-GUI_interface.o edragon-IniFile.o
   edragon-PathList.o edragon-PluginFile.o edragon-PluginsManager.o
   edragon-RCFile.o edragon-Runtime.o edragon-XMLFile.o 
edragon-testsuite_hooks.o
   -Wl,--export-dynamic  ../libltdl/.libs/libltdlc.a -ldl
   -L/usr/local/install/4.1.2-20060901/lib 
/usr/local/install/4.1.2-20060901/lib/libcwd.so
   -lboost_filesystem-gcc-d-1_33_1 
/usr/local/install/4.1.2-20060901/lib/libcairo.so
   /usr/local/install/4.1.2-20060901/lib/libglib-2.0.so
   /usr/local/install/4.1.2-20060901/lib/libxmlwrapp.so
   /usr/local/install/4.1.2-20060901/lib/libxsltwrapp.so /usr/lib/libxslt.so
   /usr/lib/libxml2.so /usr/local/install/4.1.2-20060901/lib/libcw.so
   -Wl,--rpath -Wl,/usr/local/install/4.1.2-20060901/lib
   -Wl,--rpath -Wl,/usr/local/install/4.1.2-20060901/lib

If I put the -ldl correctly AFTER the 
"/usr/local/install/4.1.2-20060901/lib/libcwd.so",
like so:

~/projects/edragon/edragon-objdir-bugreport/src>g++ -g -DCWDEBUG 
-I/usr/local/install/4.1.2-20060901/include -W -Wall -Wundef -DDEBUG 
-I/usr/include/boost-1_33_1 -o edragon -Wl,--whole-archive 
-Wl,utils/.libs/libutils.a -Wl,--no-whole-archive edragon-Application.o 
edragon-GUI_interface.o edragon-IniFile.o edragon-PathList.o 
edragon-PluginFile.o edragon-PluginsManager.o edragon-RCFile.o 
edragon-Runtime.o edragon-XMLFile.o edragon-testsuite_hooks.o 
-Wl,--export-dynamic  ../libltdl/.libs/libltdlc.a 
-L/usr/local/install/4.1.2-20060901/lib 
/usr/local/install/4.1.2-20060901/lib/libcwd.so -ldl 
-lboost_filesystem-gcc-d-1_33_1 
/usr/local/install/4.1.2-20060901/lib/libcairo.so 
/usr/local/install/4.1.2-20060901/lib/libglib-2.0.so 
/usr/local/install/4.1.2-20060901/lib/libxmlwrapp.so 
/usr/local/install/4.1.2-20060901/lib/libxsltwrapp.so /usr/lib/libxslt.so 
/usr/lib/libxml2.so /usr/local/install/4.1.2-20060901/lib/libcw.so -Wl,--rpath 
-Wl,/usr/local/install/4.1.2-20060901/lib -Wl,--rpath 
-Wl,/usr/local/install/4.1.2-20060901/lib

Then the result of the grep, obviously, becomes:

~/projects/edragon/edragon-objdir-bugreport/src>objdump -p ./edragon | grep 
NEEDED
  NEEDED      libcwd.so.0
  NEEDED      libdl.so.2
  NEEDED      libboost_filesystem-gcc-d-1_33_1.so.1.33.1
  NEEDED      libcairo.so.2
  NEEDED      libglib-2.0.so.0
  NEEDED      libxmlwrapp.so.0
  NEEDED      libxsltwrapp.so.0
  NEEDED      libxslt.so.1
  NEEDED      libxml2.so.2
  NEEDED      libcw.so.0
  NEEDED      libstdc++.so.6
  NEEDED      libm.so.6
  NEEDED      libgcc_s.so.1
  NEEDED      libc.so.6

Not passing -ldl to g++ doesn't seem like a serious option to me.

-- 
Carlo Wood <[EMAIL PROTECTED]>

Reply via email to