You are right that there are some under-the-hood changes in our configure.
Much of that was modularizing an 1860-line configure.ac into a 250-line
master file with sections broken out into m4 includes. I think it is the
combination of that along with how we identify and link to the new
dependencies introduced. As I take a closer look, there is a check in the
libz section that is explicitly omitting adding /usr/lib as an additional
path in LDFLAGS. You may be able to resolve this similarly, with changes to
the m4 files and re-building configure.

The two other files that would help trace this are the "config.log"
generated from running configure, and the "libclamav/Makefile" that is
built. If you could share those, that would be the next place to look for
information.

Dave R.


On Thu, May 8, 2014 at 4:52 PM, Alexander Tampermeier <
alexan...@tampermeier.at> wrote:

> Dave,
>
> thank you for your detailed  response. First, I tried to configure with
> option "--disable-xml" as you suggested but this attempt led to further
> problems:
>
>   CC     libclamav_internal_utils_la-regerror.lo
>   CC     libclamav_internal_utils_la-regexec.lo
>   CC     libclamav_internal_utils_la-regfree.lo
>   CCLD   libclamav_internal_utils.la
>   CCLD   libclamav.la
> /usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
> /usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
> /usr/bin/ld: skipping incompatible /usr/lib/libbz2.so when searching for
> -lbz2
> /usr/bin/ld: skipping incompatible /usr/lib/libbz2.a when searching for
> -lbz2
> /usr/lib/libltdl.so: error adding symbols: File in wrong format
>
> collect2: error: ld returned 1 exit status
> Makefile:969: recipe for target 'libclamav.la' failed
> make[4]: *** [libclamav.la] Error 1
> make[4]: Leaving directory '/j/development/clamav-0.98.3/libclamav'
> Makefile:3011: recipe for target 'all-recursive' failed
> make[3]: *** [all-recursive] Error 1
> make[3]: Leaving directory '/j/development/clamav-0.98.3/libclamav'
> Makefile:893: recipe for target 'all' failed
> make[2]: *** [all] Error 2
> make[2]: Leaving directory '/j/development/clamav-0.98.3/libclamav'
> Makefile:649: recipe for target 'all-recursive' failed
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory '/j/development/clamav-0.98.3'
> Makefile:477: recipe for target 'all' failed
> make: *** [all] Error 2
>
> So, I got into the same "error adding symbols"-trouble as before with
> libxml2, now with libltdl. First I thought, that this might be a general
> issue with my libraries. But then I tried to recompile several packages
> including php (which also uses libxml2) and everything compiled perfectly.
> This makes me believe that this issue might not be related to my system
> only.
>
> My "Cross-Compiled Linux From Scratch" system relies on a
> "multiarch-wrapper" script as desribed in http://cross-lfs.org/view/
> CLFS-2.1.0/x86_64/final-system/multiarch_wrapper.html to switch between
> 32bit and 64bit. I tested this wrapper script and it definitely can switch
> between 32bit and 64bit as expected. I also tried to temporarily substitute
> xml2-config for 32bit with the one used for 64bit as you suggested but that
> also ends up in a compilation error:
>
>     CCLD   libclamav_internal_utils.la
>     CCLD   libclamav.la
>   /usr/lib/libxml2.so: error adding symbols: File in wrong format
>   collect2: error: ld returned 1 exit status
>   Makefile:969: recipe for target 'libclamav.la' failed
>
> The permanent workaround you suggested also led to the "error adding
> symbols"-error as described above.
>
> But what definitely is strange:
> "xml2-config-32 --libs" and "xml2-config-64 --libs" both bring the same
> result: "-lxml2 -lz -lm -ldl"
> "./xml2-config-32 --cflags" and "./xml2-config-64 --cflags" both bring the
> same result: "-I/usr/include/libxml2"
>
> So finally, I temporarily changed both scripts (xml2-config-32 and
> xml2-config-64) to always give back "-L/usr/lib64 -lxml2 -lz -lm -ldl" when
> calling either script with option "--cflags" directly or by calling the
> wrapper script "xml2-config". But this still resulted in the same error as
> described above. Could this mean that the reason for the compilation error
> might not (only) lie in "xml2-config"?
>
>
> What really is confusing:
> As clamav v0.98.1 and other packages still compile perfectly I suspect
> that the issue has also something to do with changes in clamav v0.98.2 and
> 0.98.3 regarding the way clamav searches for needed libraries. Could you
> verify such a conclusion?
>
>
> Regards
> Alexander
>
>
> Am 08.05.2014 18:15, schrieb David Raynor:
>
>> Alexander,
>>
>> For libxml2, the configure script is finding and running the xml2-config
>> script that is part of a typical xml2 install to get the appropriate
>> CFLAGS
>> and LIBS values to get to libxml2. Your fallback option, if this gets too
>> complicated, is to simply run configure with --disable-xml and avoid the
>> impacted use cases and code paths.
>>
>> If you want to get it working with xml enabled, I will outline some
>> choices
>> you have for getting the proper libs pointed to.
>>
>> The ClamAV configure script is finding the xml2-config script and running
>> it based on these lines in your config.log output:
>>
>> checking for libxml2 installation... /usrchecking xml2-config
>> version... 2.9.1checking for xmlreader.h in /usr... foundchecking for
>> xmlTextReaderRead in -lxml2... yesconfigure: Compiling and linking
>>
>> with libxml2 from /usr
>>
>> In your case, the xml2-config is finding and reporting the 32-bit versions
>> from /usr/lib. You should be able to see what it is reporting by running
>> 'xml2-config --libs'.
>> A little bit more info about that helper script is available here as
>> questions 1 and 2 in their "Developers Corner" section :
>> http://xmlsoft.org/FAQ.html
>>
>> You can work around this, as long as you have an xml2-config script that
>> will report the --libs and --cflags values that correspond to your 64-bit
>> libraries instead of the 32-bit ones. But this is exactly why we need a
>> script like that. Only the CFLAGS and LIBS will be different between the
>> 32-bit & 64-bit builds. This is only tricky because the xml2-config is
>> installed to $XML_HOME/bin ... which for both installations would end up
>> being /usr/bin. After all, both sets of includes would be the same, and be
>> in /usr/include/libxml2. The xml2-config is one shared file collision
>> between the side-by-side libxml2 installations that is not actually 100%
>> shareable (barring an undocumented flag that we don't know about, but I
>> digress).
>>
>> Since the xml2-config script is only used during configure execution, I
>> see
>> two ways to resolve this.
>> (1) Temporary: Switch your current xml2-config with one that will report
>> the 64-bit flags and libs values, switch it back when you need 32-bit.
>> These are supposed to be generated with your 32-bit message.
>> (2) Permanent: Make a second folder (e.g. /usr/xml64) with an xml2-config
>> that will report the 64-bit cflags and libs values, and link an "include"
>> subfolder to your real include path, which appears to be "/usr/include".
>> Then add "--with-xml=/usr/xml64" to your configure command line. This is
>> enough for it to get through configure and get to the real values, which
>> are what it will use for building.
>> Steps summary:
>> - Make /usr/xml64 and /usr/xml64/bin directories
>> - Create /usr/xml64/bin/xml2-config script
>> - Link /usr/xml64/include to /usr/include (used to verify existence of a
>> header file)
>> - Run configure, adding  " --with-xml=/usr/xml64 "
>>
>> As far as creating a stub xml2-config script, the three xml2-config
>> commands we run as part of configure are these:
>> (1) xml2-config --version
>> In your case, this should return "2.9.1", same as your base version.
>> (2) xml2-config --cflags
>> In your case, this looks like it needs to return "-I/usr/include/libxml2",
>> again the same as your base version.
>> (3) xml2-config --libs
>> In your case, this looks like it needs to return something like
>> "-L/usr/lib64 -lxml2 ", or whatever values are appropriate for your 64-bit
>> lib path.
>>
>> We might add configure options to a future release that will let you
>> force-set libxml2 CFLAGS and LIBS values directly to workaround this case,
>> but this should let you operate for now.
>>
>> Hope this helps,
>>
>> Dave R.
>>
>>
>> On Thu, May 8, 2014 at 4:00 AM, Shawn Webb <sw...@sourcefire.com> wrote:
>>
>>  No worries. Since I'm most familiar with more conventional Linux
>>> distributions, I'm not entirely sure what's going on, but it appears your
>>> compiler/linker is still trying to link against the 32bit libraries
>>> rather
>>> than the 64bit ones: -Wl,-rpath -Wl,/usr/lib64/../lib64 -Wl,-rpath
>>> -Wl,/usr/lib64/../lib -Wl,-rpath -Wl,/usr/lib64/../lib64 -Wl,-rpath
>>> -Wl,/usr/lib64/../lib -L/usr/lib /usr/lib/libxml2.so -lz -L/usr/lib64
>>>
>>> By specifying -L/usr/lib/libxml2.so, that forces the compiler/linker to
>>> attempt link against that library (the 32bit one). Instead, it should be
>>> linking against libxml2 by using -lxml2. I'm the only member of the team
>>> awake at this hour tonight (it's 4am here). I'll bring it up with the
>>> team
>>> first thing in the morning and see what they think. I'm sure we can get a
>>> patch out to you soon.
>>>
>>> Thanks,
>>>
>>> Shawn
>>>
>>>
>>> On Thu, May 8, 2014 at 3:49 AM, Alexander Tampermeier <
>>> alexan...@tampermeier.at> wrote:
>>>
>>>  Shawn,
>>>>
>>>> I am very sorry. Obviously I mixed something up totally.
>>>>
>>>> Here is the corrected output of the configure command (now including
>>>> option --disable-silent-rules): http://de.pastebin.de/124760
>>>>
>>>> And here is the corrected output of the make command:
>>>> http://de.pastebin.de/124761
>>>>
>>>> Regards
>>>> Alexander
>>>>
>>>>
>>>> Am 08.05.2014 09:29, schrieb Shawn Webb:
>>>>
>>>>  Did you add the --disable-silent-rules to your ./configure run? It
>>>>> looks
>>>>> like step 3 is still producing friendly output.
>>>>>
>>>>>
>>>>> On Thu, May 8, 2014 at 3:21 AM, Alexander Tampermeier <
>>>>>
>>>>> alexan...@tampermeier.at> wrote:
>>>>>
>>>>>   Hello Shawn,
>>>>>
>>>>>> I executed 'make clean distclean'.
>>>>>>
>>>>>> I pasted the output of command #2 (CC="gcc ${BUILD64}" ./configure
>>>>>> ...)
>>>>>> at
>>>>>> http://de.pastebin.de/124756
>>>>>>
>>>>>> Output of command #3 (make) is pasted at http://de.pastebin.de/124757
>>>>>>
>>>>>> Regards
>>>>>> Alexander
>>>>>>
>>>>>>
>>>>>> Am 08.05.2014 08:40, schrieb Shawn Webb:
>>>>>>
>>>>>>   Can you run these commands, and paste the output of commands 2 and 3
>>>>>>
>>>>> to
>>>
>>>> your pastebin service (friendly remember to pipe stderr to stdout):
>>>>>>>
>>>>>>> 1. make clean distclean
>>>>>>> 2. CC="gcc ${BUILD64}" ./configure --prefix=/usr
>>>>>>> --sysconfdir=/etc/clamav
>>>>>>>
>>>>>>> --with-zlib=/usr --with-dbdir=/usr/share/clamav
>>>>>>> --disable-silent-rules
>>>>>>> 3. make
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Shawn
>>>>>>>
>>>>>>>
>>>>>>> On Thu, May 8, 2014 at 2:33 AM, Alexander Tampermeier <
>>>>>>>
>>>>>>> alexan...@tampermeier.at> wrote:
>>>>>>>
>>>>>>>    Hello Shawn,
>>>>>>>
>>>>>>>  thank you for your response.
>>>>>>>>
>>>>>>>> This is output of 'file /usr/lib/libxml2.so':
>>>>>>>> /usr/lib/libxml2.so: symbolic link to `libxml2.so.2.9.1'
>>>>>>>>
>>>>>>>> And 'file /usr/lib/libxml2.so.2.9.1' outputs:
>>>>>>>> /usr/lib/libxml2.so.2.9.1: ELF 32-bit LSB shared object, Intel
>>>>>>>> 80386,
>>>>>>>> version 1 (SYSV), dynamically linked, not stripped
>>>>>>>>
>>>>>>>> As my box is cross compiled x86/x64 there are also 64bit libraries,
>>>>>>>>
>>>>>>> so
>>>
>>>> that 'file /usr/lib64/libxml2.so' gives:
>>>>>>>> /usr/lib64/libxml2.so: symbolic link to `libxml2.so.2.9.1'
>>>>>>>>
>>>>>>>> And file 'file /usr/lib64/libxml2.so.2.9.1' outputs:
>>>>>>>> /usr/lib64/libxml2.so.2.9.1: ELF 64-bit LSB shared object, x86-64,
>>>>>>>> version
>>>>>>>> 1 (SYSV), dynamically linked, not stripped
>>>>>>>>
>>>>>>>> This is my configure command (building 64bit):
>>>>>>>> CC="gcc ${BUILD64}" ./configure --prefix=/usr
>>>>>>>>
>>>>>>> --sysconfdir=/etc/clamav
>>>
>>>> --with-zlib=/usr --with-dbdir=/usr/share/clamav
>>>>>>>>
>>>>>>>> Where 'echo ${BUILD64}' outputs:
>>>>>>>> -m64
>>>>>>>>
>>>>>>>> I pasted the content of my config.log at
>>>>>>>>
>>>>>>> http://de.pastebin.de/124754
>>>
>>>> Regards
>>>>>>>> Alexander
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 08.05.2014 07:52, schrieb Shawn Webb:
>>>>>>>>
>>>>>>>>    What's the output of this command: file /usr/lib/libxml2.so
>>>>>>>>
>>>>>>>>  Can you paste (preferably to a pastebin service) your config.log?
>>>>>>>>>
>>>>>>>> What
>>>
>>>> options did you pass to ./configure?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, May 8, 2014 at 1:48 AM, Alexander Tampermeier <
>>>>>>>>> alexan...@tampermeier.at> wrote:
>>>>>>>>>
>>>>>>>>>     I have been using ClamAV on my Linux box (Cross Compiled Linux
>>>>>>>>>
>>>>>>>> from
>>>
>>>>   Scratch; gcc 4.8.2) for years now and it always compiled well.
>>>>>>>>>
>>>>>>>>>> Now, compiling version 0.98.3 (and also in 0.98.2) I get the
>>>>>>>>>> following
>>>>>>>>>> compiling error:
>>>>>>>>>>
>>>>>>>>>>       CC     libclamav_la-fp_sqr_comba_8.lo
>>>>>>>>>>       CC     libclamav_la-fp_sqr_comba_9.lo
>>>>>>>>>>       CC     libclamav_la-fp_sqr_comba_generic.lo
>>>>>>>>>>       CC     libclamav_la-fp_sqr_comba_small_set.lo
>>>>>>>>>>       CC     libclamav_la-fp_sqrmod.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-str.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-crypto.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-iowrap.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-others_common.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-qsort.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-regcomp.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-regerror.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-regexec.lo
>>>>>>>>>>       CC     libclamav_internal_utils_la-regfree.lo
>>>>>>>>>>       CCLD   libclamav_internal_utils.la
>>>>>>>>>>       CCLD   libclamav.la
>>>>>>>>>> /usr/lib/libxml2.so: error adding symbols: File in wrong format
>>>>>>>>>> collect2: error: ld returned 1 exit status
>>>>>>>>>> Makefile:969: recipe for target 'libclamav.la' failed
>>>>>>>>>> make[4]: *** [libclamav.la] Error 1
>>>>>>>>>> make[4]: Leaving directory '/j/development/clamav-0.98.3/
>>>>>>>>>> libclamav'
>>>>>>>>>> Makefile:3011: recipe for target 'all-recursive' failed
>>>>>>>>>> make[3]: *** [all-recursive] Error 1
>>>>>>>>>> make[3]: Leaving directory '/j/development/clamav-0.98.3/
>>>>>>>>>> libclamav'
>>>>>>>>>> Makefile:893: recipe for target 'all' failed
>>>>>>>>>> make[2]: *** [all] Error 2
>>>>>>>>>> make[2]: Leaving directory '/j/development/clamav-0.98.3/
>>>>>>>>>> libclamav'
>>>>>>>>>> Makefile:649: recipe for target 'all-recursive' failed
>>>>>>>>>> make[1]: *** [all-recursive] Error 1
>>>>>>>>>> make[1]: Leaving directory '/j/development/clamav-0.98.3'
>>>>>>>>>> Makefile:477: recipe for target 'all' failed
>>>>>>>>>> make: *** [all] Error 2
>>>>>>>>>>
>>>>>>>>>> Does anybody know how to get around this? I already recompiled
>>>>>>>>>> libxml2
>>>>>>>>>> (v2.9.1) but the error persists.
>>>>>>>>>> ClamAV v0.98.1 still compiles perfectly.
>>>>>>>>>>
>>>>>>>>>> Regards
>>>>>>>>>> Alexander
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Help us build a comprehensive ClamAV guide:
>>>>>>>>>> https://github.com/vrtadmin/clamav-faq
>>>>>>>>>> http://www.clamav.net/support/ml
>>>>>>>>>>
>>>>>>>>>>     _______________________________________________
>>>>>>>>>>
>>>>>>>>>>   Help us build a comprehensive ClamAV guide:
>>>>>>>>>>
>>>>>>>>> https://github.com/vrtadmin/clamav-faq
>>>>>>>>> http://www.clamav.net/support/ml
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>    _______________________________________________
>>>>>>>>>
>>>>>>>>>  Help us build a comprehensive ClamAV guide:
>>>>>>>> https://github.com/vrtadmin/clamav-faq
>>>>>>>> http://www.clamav.net/support/ml
>>>>>>>>
>>>>>>>>    _______________________________________________
>>>>>>>>
>>>>>>>>  Help us build a comprehensive ClamAV guide:
>>>>>>> https://github.com/vrtadmin/clamav-faq
>>>>>>> http://www.clamav.net/support/ml
>>>>>>>
>>>>>>>
>>>>>>>   _______________________________________________
>>>>>>>
>>>>>> Help us build a comprehensive ClamAV guide:
>>>>>> https://github.com/vrtadmin/clamav-faq
>>>>>> http://www.clamav.net/support/ml
>>>>>>
>>>>>>   _______________________________________________
>>>>>>
>>>>> Help us build a comprehensive ClamAV guide:
>>>>> https://github.com/vrtadmin/clamav-faq
>>>>> http://www.clamav.net/support/ml
>>>>>
>>>>>
>>>>>  _______________________________________________
>>>> Help us build a comprehensive ClamAV guide:
>>>> https://github.com/vrtadmin/clamav-faq
>>>> http://www.clamav.net/support/ml
>>>>
>>>>  _______________________________________________
>>> Help us build a comprehensive ClamAV guide:
>>> https://github.com/vrtadmin/clamav-faq
>>> http://www.clamav.net/support/ml
>>>
>>>
>>
>>
> _______________________________________________
> Help us build a comprehensive ClamAV guide:
> https://github.com/vrtadmin/clamav-faq
> http://www.clamav.net/support/ml
>



-- 
---
Dave Raynor
Vulnerability Research Team
dray...@sourcefire.com
_______________________________________________
Help us build a comprehensive ClamAV guide:
https://github.com/vrtadmin/clamav-faq
http://www.clamav.net/support/ml

Reply via email to