Wyllys Ingersoll wrote:
> 
> I get a big list of these errors when I try to access
> the linkers discussion archives on opensolaris.org.
> 
> type: java.lang.NullPointerException
> 
> java.lang.NullPointerException
>     at com.jivesoftware.forum.proxy.ForumMessageProxy.getUser(Unknown 
> Source)
>     at org.apache.jsp.viewforum_jsp._jspService(Unknown Source)
>     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>     at sun.reflect.GeneratedMethodAccessor172.invoke(Unknown Source)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce

Hmm, so I see.  I've pinged the folks who administer this stuff.


> Anyway -
> 
> My question is about the "zignore" option.   I am getting "check_rtime" 
> warnings
> because a library that I am linking against has an unreferenced object.
> 
> $ /ws/on10-tools/onbld/bin/check_rtime sparc/kmf_nss.so.1
> ==== ./kmf_nss.so.1 ====
>        unreferenced object=/usr/lib/mps/libplds4.so; unused dependency 
> of /usr/lib/mps/libsmime3.so    <remove lib or -zignore?>
> ====
> 
> Adding "zignore" to my DYNFLAGS line when I build my lib (kmf_nss.so.1) 
> doesn't fix the problem.
> Is it possible to make this warning go away without rebuilding 
> libsmime3.so.1 (which I don't
> have access to) ?

No :-)

The problem is that libsmime3.so has the unused reference.  -z ignore
only works against the primary dependencies of the object you are building.

But, what system is this occurring on?

If I run ldd against libsmime3.so, I see no errors (the check_rtime
errors are from ldd).

chaz 401. ldd -rU /usr/lib/mps/libsmime3.so
         libnss3.so =>    /usr/lib/mps/libnss3.so
         libplc4.so =>    /usr/lib/mps/libplc4.so
         libnspr4.so =>   /usr/lib/mps/libnspr4.so
         libc.so.1 =>     /lib/libc.so.1
         libsoftokn3.so =>        /usr/lib/mps/libsoftokn3.so
         libplds4.so =>   /usr/lib/mps/libplds4.so
         libpthread.so.1 =>       /lib/libpthread.so.1
         libthread.so.1 =>        /lib/libthread.so.1
         librt.so.1 =>    /lib/librt.so.1
         libsocket.so.1 =>        /lib/libsocket.so.1
         libnsl.so.1 =>   /lib/libnsl.so.1
         libdl.so.1 =>    /lib/libdl.so.1
         libbsm.so.1 =>   /lib/libbsm.so.1
         libmp.so.2 =>    /lib/libmp.so.2
         libmd.so.1 =>    /lib/libmd.so.1
         libscf.so.1 =>   /lib/libscf.so.1
         libsecdb.so.1 =>         /lib/libsecdb.so.1
         libtsol.so.2 =>  /lib/libtsol.so.2
         libuutil.so.1 =>         /lib/libuutil.so.1
         libgen.so.1 =>   /lib/libgen.so.1
         libm.so.2 =>     /lib/libm.so.2

Which implies that libplds4.so is needed by libsmime3.so.  We can
verify that with:

chaz 403. ldd -rU -e LD_DEBUG=bindings /usr/lib/mps/libsmime3.so 2>&1 | \
    fgrep "to file=/usr/lib/mps/libplds4.so" | \
    fgrep -v "binding file=/usr/lib/mps/libplds4.so"
00408: binding file=/usr/lib/mps/libnss3.so to file=/usr/lib/mps/libplds4.so: 
symbol `PL_CompareStrings'
00408: binding file=/usr/lib/mps/libnss3.so to file=/usr/lib/mps/libplds4.so: 
symbol `PL_HashString'
00408: binding file=/usr/lib/mps/libnss3.so to file=/usr/lib/mps/libplds4.so: 
symbol `PL_CompareValues'
......
00408: binding file=/usr/lib/mps/libsoftokn3.so to 
file=/usr/lib/mps/libplds4.so: symbol `PL_CompareValues'
00408: binding file=/usr/lib/mps/libsoftokn3.so to 
file=/usr/lib/mps/libplds4.so: symbol `PL_HashTableLookupConst'
00408: binding file=/usr/lib/mps/libsoftokn3.so to 
file=/usr/lib/mps/libplds4.so: symbol `PL_NewHashTable'
....

So, libnss3.so and libsoftokn3.so bind to libplds4.so for a number of
symbols.

For libplds4.so to become unused when you build kmf_nss.so.1, these
symbols must be being found somewhere else.

Are we playing some interposition games here?

-- 
Rod

Reply via email to