Re: error: template with C linkage

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

 



On Sat, Sep 17, 2011 at 9:47 AM, Marc Glisse <marc.glisse@xxxxxxxx> wrote:
> On Sat, 17 Sep 2011, Jeffrey Walton wrote:
>
>> Hi All,
>>
>> I'm working on a OpenBSD 4.9 system, and I've receiving multiple
>> "error: template with C linkage" errors. OpenBSD uses a 4.2.1
>> compiler.
>> $ gcc --version
>> gcc (GCC) 4.2.1 20070719
>> Copyright (C) 2007 Free Software Foundation, Inc.
>>
>> A typical output is:
>> g++ -g3 -ggdb -O0 -pipe -fsigned-char -fmessage-length=0
>> -Woverloaded-virtual -Wreorder -Wformat=2 -Wformat-security
>> -Wno-unused -fvisibility=hidden -fstack-protector -I. -I./esapi
>> -I./deps -I/usr/local/include -fpic -c src/codecs/HTMLEntityCodec.cpp
>> -o src/codecs/HTMLEntityCodec.o
>> In file included from /usr//include/cryptopp/misc.h:4,
>>                from ./esapi/crypto/Crypto++Common.h:24,
>>                from src/codecs/HTMLEntityCodec.cpp:12:
>> /usr//include/cryptopp/cryptlib.h:99: error: template with C linkage
>> /usr//include/cryptopp/cryptlib.h:247: error: template with C linkage
>> /usr//include/cryptopp/cryptlib.h:254: error: template with C linkage
>> /usr//include/cryptopp/cryptlib.h:261: error: template with C linkage
>> /usr//include/cryptopp/cryptlib.h:268: error: template with C linkage
>> /usr//include/cryptopp/cryptlib.h:293: error: template with C linkage
>> /usr//include/cryptopp/cryptlib.h:698: error: template with C linkage
>>
>> The first offending line in cryptlib.h is:
>>
>> // VC60 workaround: using enums as template parameters causes problems
>> template <typename ENUM_TYPE, int VALUE>
>> struct EnumToType
>> {
>>        static ENUM_TYPE ToEnum() {return (ENUM_TYPE)VALUE;}
>> };
>>
>> I've tried adding '-x c++' to force c++ in the files. I have also
>> audited Crypto++ and my code for a 'dangling extern "C"'. Crypto++
>> uses extern "C" about 13 times (a typical usage is below), and I don't
>> use it.
>>
>> #ifdef CRYPTOPP_X64_MASM_AVAILABLE
>> extern "C" {
>> void Rijndael_Enc_AdvancedProcessBlocks(void *locals, const word32 *k);
>> }
>> #endif
>>
>> I built Crypto++ from sources (it compiled and self-tested OK) and
>> then installed it via makefile. So I'm surprised to find Crypto++ is
>> [supposedly] causing problems.
>>
>> I found a few bug reports relating to a spurious error, but they
>> appeared to be for platforms other than x86/x64.
>
> Does it make a difference if you put the crypto++ headers in a non-system
> location and include them from there with -I?
Thanks Marc. Changing PREFIX to /usr/local did the trick.

Jeff



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux