Hello!

I'm running into a baffling link error when rebuilding activesyncd
f72a6ce from today:

make[1]: Entering directory `/home/pohly/work/activesyncd/eas-daemon/src'
/bin/bash ../../libtool  --tag=CC   --mode=link gcc  -g -Wall 
-DG_DISABLE_DEPRECATED -DDISABLE_EAS_DAEMON -g   -Wall -Wextra 
-Wno-missing-field-initializers -Wno-sign-compare -Wno-unused-parameter 
-Werror=pointer-to-int-cast -Wdeclaration-after-statement 
-Werror-implicit-function-declaration -Wformat-nonliteral -Wformat-security 
-Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wmissing-noreturn 
-Wnested-externs -Wpointer-arith -Wundef -Wwrite-strings 
-L/usr/local/evolution-2.32-2011-07-05/lib -lglib-2.0   -pthread 
-L/usr/local/evolution-2.32-2011-07-05/lib -ledataserver-1.2 -lxml2 -lgconf-2 
-lsoup-2.4 -lgio-2.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0  
 -ldbus-1 -lpthread -lrt   -pthread -L/usr/local/evolution-2.32-2011-07-05/lib 
-ldbus-glib-1 -ldbus-1 -lpthread -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0   
-pthread -L/usr/local/evolution-2.32-2011-07-05/lib -lsoup-2.4 -lgio-2.0 
-lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0    -o actives
 yncd activesyncd-activesyncd-server.o activesyncd-eas-sync.o 
activesyncd-eas-common.o activesyncd-eas-mail.o activesyncd-eas-test.o 
activesyncd-eas-marshal.o activesyncd-eas-interface-base.o 
../../logger/libeaslogger.la ../libeas/libeas.la 
../../libeasmail/src/libeasmail.la ../../libeassync/src/libeassync.la 
../../libeastest/src/libeastest.la  
libtool: link: gcc -g -Wall -DG_DISABLE_DEPRECATED -DDISABLE_EAS_DAEMON -g 
-Wall -Wextra -Wno-missing-field-initializers -Wno-sign-compare 
-Wno-unused-parameter -Werror=pointer-to-int-cast -Wdeclaration-after-statement 
-Werror-implicit-function-declaration -Wformat-nonliteral -Wformat-security 
-Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wmissing-noreturn 
-Wnested-externs -Wpointer-arith -Wundef -Wwrite-strings -pthread -pthread 
-pthread -o .libs/activesyncd activesyncd-activesyncd-server.o 
activesyncd-eas-sync.o activesyncd-eas-common.o activesyncd-eas-mail.o 
activesyncd-eas-test.o activesyncd-eas-marshal.o 
activesyncd-eas-interface-base.o  -L/usr/local/evolution-2.32-2011-07-05/lib 
/usr/local/evolution-2.32-2011-07-05/lib/libedataserver-1.2.so 
/usr/lib/libxml2.so /usr/lib/libgconf-2.so -ldbus-glib-1 -ldbus-1 -lpthread 
-lsoup-2.4 /usr/local/evolution-2.32-2011-07-05/lib/libgio-2.0.so 
/usr/local/evolution-2.32-2011-07-05/lib/libgobject-2.0.so /usr/local/evolutio
 n-2.32-2011-07-05/lib/libgmodule-2.0.so 
/usr/local/evolution-2.32-2011-07-05/lib/libgthread-2.0.so -lrt 
/usr/local/evolution-2.32-2011-07-05/lib/libglib-2.0.so 
../../logger/.libs/libeaslogger.so ../libeas/.libs/libeas.so 
../../libeasmail/src/.libs/libeasmail.so 
../../libeassync/src/.libs/libeassync.so 
../../libeastest/src/.libs/libeastest.so -pthread -Wl,-rpath 
-Wl,/usr/local/evolution-2.32-2011-07-05/lib -Wl,-rpath -Wl,/tmp/activesyncd/lib
../libeas/.libs/libeas.so: undefined reference to 
`eas_account_set_server_protocols'
collect2: ld returned 1 exit status
make[1]: *** [activesyncd] Error 1
make[1]: Leaving directory `/home/pohly/work/activesyncd/eas-daemon/src'

What confuses me is that eas_account_set_server_protocols is in
libeasaccounts.so and libeas.so was linked against that library:

$ ldd ../libeas/.libs/libeas.so | grep account
        libeasaccount.so.0 => 
/home/pohly/work/activesyncd/libeasaccount/src/.libs/libeasaccount.so.0 
(0x00007f2797caf000)
$ objdump -T 
/home/pohly/work/activesyncd/libeasaccount/src/.libs/libeasaccount.so.0 | grep 
eas_account_set_server_protocols
000000000000413f g    DF .text  00000000000003de  Base        
eas_account_set_server_protocols
$ objdump -T ../libeas/.libs/libeas.so | grep eas_account_set_server_protocols
0000000000000000      DF *UND*  0000000000000000              
eas_account_set_server_protocols


There's also no other reference to that symbol:

$ gcc -g -Wall -DG_DISABLE_DEPRECATED -DDISABLE_EAS_DAEMON -g -Wall -Wextra 
-Wno-missing-field-initializers -Wno-sign-compare -Wno-unused-parameter 
-Werror=pointer-to-int-cast -Wdeclaration-after-statement 
-Werror-implicit-function-declaration -Wformat-nonliteral -Wformat-security 
-Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wmissing-noreturn 
-Wnested-externs -Wpointer-arith -Wundef -Wwrite-strings -pthread -pthread 
-pthread -o .libs/activesyncd activesyncd-activesyncd-server.o 
activesyncd-eas-sync.o activesyncd-eas-common.o activesyncd-eas-mail.o 
activesyncd-eas-test.o activesyncd-eas-marshal.o 
activesyncd-eas-interface-base.o  -L/usr/local/evolution-2.32-2011-07-05/lib 
/usr/local/evolution-2.32-2011-07-05/lib/libedataserver-1.2.so 
/usr/lib/libxml2.so /usr/lib/libgconf-2.so -ldbus-glib-1 -ldbus-1 -lpthread 
-lsoup-2.4 /usr/local/evolution-2.32-2011-07-05/lib/libgio-2.0.so 
/usr/local/evolution-2.32-2011-07-05/lib/libgobject-2.0.so 
/usr/local/evolution-2.32-2011-0
 7-05/lib/libgmodule-2.0.so 
/usr/local/evolution-2.32-2011-07-05/lib/libgthread-2.0.so -lrt 
/usr/local/evolution-2.32-2011-07-05/lib/libglib-2.0.so 
../../logger/.libs/libeaslogger.so ../libeas/.libs/libeas.so 
../../libeasmail/src/.libs/libeasmail.so 
../../libeassync/src/.libs/libeassync.so 
../../libeastest/src/.libs/libeastest.so -pthread -Wl,-rpath 
-Wl,/usr/local/evolution-2.32-2011-07-05/lib -Wl,-rpath 
-Wl,/tmp/activesyncd/lib -Wl,-trace-symbol=eas_account_set_server_protocols
../libeas/.libs/libeas.so: reference to eas_account_set_server_protocols
../libeas/.libs/libeas.so: undefined reference to 
`eas_account_set_server_protocols'
collect2: ld returned 1 exit status

Why doesn't the linker consider libeasaccount.so.0 when checking for
this symbol? Why does it care in the first place?

[a bit later]

Found it. stracing the final ld invocation shows that it looks at an old
libeasaccount.so.0 in my /tmp/activesyncd install dir. Wiping that out
first avoided the issue.

I still don't know why ld considers those old libs at all. Does setting
the rpath have that effect? That is the only reference
to /tmp/activesyncd/lib.

Here's the final ld:

$ /usr/bin/ld -v --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=both 
-dynamic-linker /lib64/ld-linux-x86-64.so.2 -o .libs/activesyncd 
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o 
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o 
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o 
-L/usr/local/evolution-2.32-2011-07-05/lib 
-L/usr/lib/gcc/x86_64-linux-gnu/4.4.5 -L/usr/lib/gcc/x86_64-linux-gnu/4.4.5 
-L/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib -L/lib/../lib 
-L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../.. 
-L/usr/lib/x86_64-linux-gnu activesyncd-activesyncd-server.o 
activesyncd-eas-sync.o activesyncd-eas-common.o activesyncd-eas-mail.o 
activesyncd-eas-test.o activesyncd-eas-marshal.o 
activesyncd-eas-interface-base.o 
/usr/local/evolution-2.32-2011-07-05/lib/libedataserver-1.2.so 
/usr/lib/libxml2.so /usr/lib/libgconf-2.so -ldbus-glib-1 -ldbus-1 -lpthread 
-lsoup-2.4 /usr/local/evolution-2.32-2011-07-05/lib/libgio-2.0.so /usr/local/evo
 lution-2.32-2011-07-05/lib/libgobject-2.0.so 
/usr/local/evolution-2.32-2011-07-05/lib/libgmodule-2.0.so 
/usr/local/evolution-2.32-2011-07-05/lib/libgthread-2.0.so -lrt 
/usr/local/evolution-2.32-2011-07-05/lib/libglib-2.0.so 
../../logger/.libs/libeaslogger.so ../libeas/.libs/libeas.so 
../../libeasmail/src/.libs/libeasmail.so 
../../libeassync/src/.libs/libeassync.so 
../../libeastest/src/.libs/libeastest.so -rpath 
/usr/local/evolution-2.32-2011-07-05/lib -rpath /tmp/activesyncd/lib 
-trace-symbol=eas_account_set_server_protocols -lgcc --as-needed -lgcc_s 
--no-as-needed -lpthread -lc -lgcc --as-needed -lgcc_s --no-as-needed 
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o 
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o

-- 
Best Regards, Patrick Ohly

The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.


_______________________________________________
SyncEvolution mailing list
[email protected]
http://lists.syncevolution.org/listinfo/syncevolution

Reply via email to