[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: library search test fails, please help

From: John Calcote
Subject: RE: library search test fails, please help
Date: Mon, 23 Feb 2009 10:14:50 -0700


As you've already figured out, AC_CHECK_LIB was designed for C linkage. That
means that you'd need to name your function exactly as it is exported by
your library - eg., ZN8cpputils4flipEd (minus the leading underscore
character) - in order to trick the macro into finding it. This is a hack,
but it's better than redefining your function with C linkage in your

Autoconf does appear to provide a framework for different languages. But a
quick examination of /usr/share/autoconf/autoconf/c.m4 shows that the C++
version of AC_LANG_CALL (used by AC_CHECK_LIB) is just a copy of the C
version of that macro. Other languages can't get away with such a cavalier
attitude (as they're not as close to the C language). But it would be nice
if someone would rewrite AC_LANG_CALL(C++) to actually handle C++ linkage.

In fairness, this may cause more problems than it would solve, because while
some might want to look for a function exported with C++ linkage, MOST C++
libraries provide at least ONE global function that is exported with C
linkage. The idea with AC_CHECK_LIB isn't to find the function you want to
call here, but rather to simply be pretty sure that the library you've found
is the one you're interested in. If you want to find a specific function,
then try AC_SEARCH_LIBS. But be careful, you'll find some of the same issues
with that macro, as well as some issues of its own.

Kind regards,

-----Original Message-----
From: address@hidden
[mailto:address@hidden On Behalf Of
Sent: Sunday, February 22, 2009 8:31 PM
To: address@hidden
Subject: Re: library search test fails, please help

cpputils is a C++ library I wrote. The result from that command is 

address@hidden:~/Lib/lib$ nm -g | grep flip
00003c20 T _ZN8cpputils4flipEd

and if I filter that using c++filt:

address@hidden:~/Lib/lib$ nm -g | grep flip | c++filt
00003c20 T cpputils::flip(double)

Is there a way to make this macro work with C++ functions??? for the time
being, I thought that it might be a very good idea to create a function with
C linkage, so for example in my library I wrote:

extern "C" {
    int cpputils_autotools() {
        return 0;

so I can use that function in the test for autotools. This I guess is
something that should be done automatically by autotools when creating C++
libraries, so that people don't break their head agains the wall trying to
find out why the macros to test for libraries don't work.


Peter O'Gorman wrote:
> aaragon wrote:
>> Hello,
>> I found working with autoconf sometimes very frustrating. This is an
>> example. I want to check for a particular static library that I created.
>> Thus, I put the following in the file
>> configure:15785: g++-mp-4.3 -g -O3 -o conftest -g -O2
>> -I/Users/aaragon/Lib/include -L/Users/aaragon/Lib/lib conftest.cpp
>> -lcpputils   >&5
>> Undefined symbols:
>>   "_flip", referenced from:
> I'm guessing that the cpputils library does not define "_flip". Does nm
> -g libcpputils.a | grep _flip show it with a capital letter?
> Peter
> -- 
> Peter O'Gorman
> _______________________________________________
> Autoconf mailing list
> address@hidden

View this message in context:
Sent from the Gnu - Autoconf - General mailing list archive at

Autoconf mailing list

reply via email to

[Prev in Thread] Current Thread [Next in Thread]