svarshavchik / courier

Courier Mail Server
http://www.courier-mta.org
72 stars 12 forks source link

fixed courier-authlib build error. #9

Closed mumumu closed 6 years ago

mumumu commented 6 years ago

I tried to build courier-authlib by the following procedure, but got linker error because the lack of debug.[oc] dependency. I fixed it by changing Makefile.am.

$ gcc --version
gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

$ sh INSTALLME courier-authlib https://github.com/svarshavchik/courier-libs.git
$ cd courier-authlib
$ ./configure
$ make

(.snip)

/bin/bash ./libtool  --tag=CXX   --mode=link g++  -g -O2 -Wall -Ilibs -I./libs -export-dynamic -dlopen libauthuserdb.la -dlopen libauthpwd.la -dlopen libauthshadow.la -dlopen libauthcustom.la -dlopen libauthpipe.la   -o authdaemondprog authdaemond.o authdaemondcpp.o -lltdl libcourierauthcommon.la libs/liblock/liblock.la libs/libhmac/libhmac.la libs/md5/libmd5.la libs/sha1/libsha1.la libs/rfc822/libencode.la libs/numlib/libnumlib.la 
libtool: link: rm -f .libs/authdaemondprog.nm .libs/authdaemondprog.nmS .libs/authdaemondprog.nmT
libtool: link: rm -f ".libs/authdaemondprog.nmI"
libtool: link: (cd .libs && gcc -g -O2 -Wall -Ilibs -I./libs -c -fno-builtin "authdaemondprogS.c")
libtool: link: rm -f ".libs/authdaemondprogS.c" ".libs/authdaemondprog.nm" ".libs/authdaemondprog.nmS" ".libs/authdaemondprog.nmT" ".libs/authdaemondprog.nmI"
libtool: link: g++ -g -O2 -Wall -Ilibs -I./libs .libs/authdaemondprogS.o -o .libs/authdaemondprog authdaemond.o authdaemondcpp.o -Wl,--export-dynamic  /usr/lib/x86_64-linux-gnu/libltdl.so ./.libs/libcourierauthcommon.so libs/liblock/.libs/liblock.a libs/libhmac/.libs/libhmac.a libs/md5/.libs/libmd5.a libs/sha1/.libs/libsha1.a libs/rfc822/.libs/libencode.a libs/numlib/.libs/libnumlib.a -Wl,-rpath -Wl,/usr/local/lib/courier-authlib
authdaemondcpp.o: In function `main':
/home/mumumu/build/courier/courier-authlib/authdaemondcpp.cpp:18: undefined reference to `courier_authdebug_login_init'
authdaemond.o: In function `printauth':
/home/mumumu/build/courier/courier-authlib/authdaemond.c:422: undefined reference to `courier_authdebug_authinfo'
authdaemond.o: In function `pre':
/home/mumumu/build/courier/courier-authlib/authdaemond.c:507: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:524: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:518: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:518: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:533: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:536: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:536: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:507: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:529: undefined reference to `courier_authdebug_printf'
authdaemond.o: In function `enumerate':
/home/mumumu/build/courier/courier-authlib/authdaemond.c:635: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:635: undefined reference to `courier_authdebug_printf'
authdaemond.o: In function `auth':
/home/mumumu/build/courier/courier-authlib/authdaemond.c:744: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:751: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:757: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:769: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:745: undefined reference to `courier_authdebug_login_level'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:771: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:765: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:744: undefined reference to `courier_authdebug_printf'
/home/mumumu/build/courier/courier-authlib/authdaemond.c:745: undefined reference to `courier_authdebug_login_level'
collect2: error: ld returned 1 exit status
Makefile:1151: recipe for target 'authdaemondprog' failed
make[2]: *** [authdaemondprog] Error 1
make[2]: Leaving directory '/home/mumumu/build/courier/courier-authlib'
Makefile:1482: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/mumumu/build/courier/courier-authlib'
Makefile:889: recipe for target 'all' failed
make: *** [all] Error 2
mumumu commented 6 years ago

authdaemondprog links with libcouriercommon.la with links with libcourierauth.la

Yes. authdaemondprog links with libcourierauthcommon.la. But it's strange that libcourierauthcommon.la does not inherit libcourierauth.la's debug.c symbol.

$ nm -u .libs/libcourierauthcommon.so | grep debug
                 U courier_authdebug_login_level
                 U courier_authdebug_printf

So, I added libcourierauth.la dependency to LDADD instead of debug.c. How do you think?

svarshavchik commented 6 years ago

This must be some kind of a libtool issue. My link pulls in libcourierauth automatically:

/bin/sh ./libtool  --tag=CXX   --mode=link g++  -I/usr/include/mysql -I/usr/include/mysql -I/usr/include -g -O2 -Wall -Ilibs -I./libs -export-dynamic -dlopen libauthuserdb.la -dlopen libauthpam.la -dlopen libauthpgsql.la -dlopen libauthldap.la -dlopen libauthmysql.la -dlopen libauthsqlite.la -dlopen libauthcustom.la -dlopen libauthpipe.la   -o authdaemondprog authdaemond.o authdaemondcpp.o -lltdl libcourierauthcommon.la libs/liblock/liblock.la libs/libhmac/libhmac.la libs/md5/libmd5.la libs/sha1/libsha1.la libs/rfc822/libencode.la libs/numlib/libnumlib.la 
libtool: link: rm -f .libs/authdaemondprog.nm .libs/authdaemondprog.nmS .libs/authdaemondprog.nmT
libtool: link: rm -f ".libs/authdaemondprog.nmI"
libtool: link: (cd .libs && gcc -I/usr/include/mysql -I/usr/include/mysql -I/usr/include -g -O2 -Wall -Ilibs -I./libs -c -fno-builtin "authdaemondprogS.c")
libtool: link: rm -f ".libs/authdaemondprogS.c" ".libs/authdaemondprog.nm" ".libs/authdaemondprog.nmS" ".libs/authdaemondprog.nmT" ".libs/authdaemondprog.nmI"
libtool: link: g++ -I/usr/include/mysql -I/usr/include/mysql -I/usr/include -g -O2 -Wall -Ilibs -I./libs .libs/authdaemondprogS.o -o .libs/authdaemondprog authdaemond.o authdaemondcpp.o -Wl,--export-dynamic  -lltdl ./.libs/libcourierauthcommon.so /home/mrsam/src/courier.git/courier-authlib/.libs/libcourierauth.so libs/liblock/.libs/liblock.a libs/libhmac/.libs/libhmac.a libs/md5/.libs/libmd5.a libs/sha1/.libs/libsha1.a libs/rfc822/.libs/libencode.a libs/numlib/.libs/libnumlib.a -Wl,-rpath -Wl,/usr/local/lib/courier-authlib

Explicitly linking with libcourierauth does not harm, though.

mumumu commented 6 years ago

@svarshavchik Just for future reference, can you let me know about your build environment? I guess that a similar build problem will be occur in the future.

My environment is the following.

svarshavchik commented 6 years ago

Fedora 28, with gcc 8.1.1, autoconf 1.15.1 libtool 2.4.6 and autoconf 2.69.

It's unlikely that the compiler makes any difference with this issue specifically; it's probably distribution-specific patches to libtool.

When I build my libcourierauthcommon.la contains:

# Libraries that this one depends upon.
dependency_libs=' /home/mrsam/src/courier-authlib/libcourierauth.la -ldl'

I surmise that linking with libcourierauthcomon.la also pulls in libcourierauth.la that way.