Wei Dai, Thanks for the fix. I have compiled the library and everything is working fine now. I have no idea why QNX doesn't totally conform to the C standard. In their developper manual, they are saying that free() and malloc() are part of the <stdlib.h> but, in my testing, free() is only defined in the <malloc.h> file...
On Aug 14, 9:54 pm, "Wei Dai" <[EMAIL PROTECTED]> wrote: > Thanks for reporting this. See attached patch for my preferred fix. The > Crypto++ license allows modifications to the source code, so of course > you're not voiding it by making modifications. > > BTW, it's part of the C standard for <stdlib.h> to contain malloc and free. > Why does QNX put them in <malloc.h> instead? > > > > ----- Original Message ----- > From: "kody0" <[EMAIL PROTECTED]> > To: "Crypto++ Users" <[EMAIL PROTECTED]> > Sent: Tuesday, August 14, 2007 6:20 AM > Subject: Missing headers for memcpy_s in QNX 6 > > > I've tried to compile the cryptopp library under QNX 6 but it failed > > with the following errors: > > > <code> > > C:/QNX630/host/win32/x86/usr/bin/ntoppc-gcc-3.3.5 -BC:/QNX630/host/ > > win32/x86/usr/ntoppc/bin -c -o algebra.o -DUNIX -fPIC -DPPC - > > D__BIGENDIAN__ -O0 -g -DMG_DEBUG -Wall -Wno-format -Wno- > > unused-function -DQNX -Dunix -DFALCON -D__BIG_ENDIAN__ -D__unix__ - > > pipe -DOSTYPE=qnx -I. -IC:/QNX630/target/qnx6/usr/include -IC:/QNX630/ > > target/qnx6/usr/include/cpp -IC:/QNX630/target/qnx6/usr/include/cpp/ > > c algebra.cpp > > In file included from secblock.h:7, > > from integer.h:7, > > from algebra.cpp:9: > > misc.h: In function `void CryptoPP::memcpy_s(void*, unsigned int, > > const void*, > > unsigned int)': > > misc.h:159: error: `memcpy' undeclared (first use this function) > > misc.h:159: error: (Each undeclared identifier is reported only once > > for each > > function it appears in.) > > misc.h: In function `void CryptoPP::memmove_s(void*, unsigned int, > > const void*, > > unsigned int)': > > misc.h:166: error: `memmove' undeclared (first use this function) > > secblock.h: In member function `void CryptoPP::AllocatorWithCleanup<T, > > T_Align16>::deallocate(void*, typename > > CryptoPP::AllocatorBase<T>::size_type) [with T = word32, bool > > T_Align16 = > > false]': > > secblock.h:298: instantiated from `CryptoPP::SecBlock<T, > > A>::~SecBlock() [with T = word, A = CryptoPP::AllocatorWithCl > > eanup<word32, false>]' > > integer.h:224: instantiated from here > > secblock.h:142: error: `free' undeclared (first use this function) > > make[2]: *** [../../../bin_qnx_ppc_mg7000/lic/licmgr/cryptopp/ > > algebra.o] Error 1 > > make[2]: Leaving directory `T:/NaMX/depot/user/dbeaulieu/NAMX/2.0/lic/ > > licmgr/cryptopp' > > make[1]: *** [lic/licmgr/cryptopp.dir] Error 2 > > make[1]: Leaving directory `T:/NaMX/depot/user/dbeaulieu/NAMX/2.0' > > </code> > > > It complains that it cannot find the headers file for both the free > > and the memcpy function. This is happening in the memcpy_s function. > > QNX 6 doesn't have these function available so the > > __STDC_WANT_SECURE_LIB__ define equals 0 (or is undefined). > > > To make the library compile, I've added this two headers in the misc.h > > header file: > > > <code> > > #ifdef QNX > > // memcpy function and free includes > > #include <string.h> > > #include <malloc.h> > > #endif > > </code> > > > Afterwards, the library compiles successfully. But it is unclear to me > > whether there is a better way of doing this... Maybe I am missing a > > preprocessor define that would include these? Also does this void the > > license if I plan to use it in a commercial product? > > > Thanks > > > > [patch.txt]Index: misc.h > =================================================================== > --- misc.h (revision 379) > +++ misc.h (working copy) > @@ -3,6 +3,7 @@ > > #include "cryptlib.h" > #include "smartptr.h" > +#include <string.h> // for memcpy and memmove > > #ifdef _MSC_VER > #include <stdlib.h> > Index: secblock.h > =================================================================== > --- secblock.h (revision 379) > +++ secblock.h (working copy) > @@ -5,10 +5,9 @@ > > #include "config.h" > #include "misc.h" > -#include <string.h> // CodeWarrior doesn't have memory.h > #include <assert.h> > > -#if defined(CRYPTOPP_MEMALIGN_AVAILABLE) || > defined(CRYPTOPP_MM_MALLOC_AVAILABLE) > +#if defined(CRYPTOPP_MEMALIGN_AVAILABLE) || > defined(CRYPTOPP_MM_MALLOC_AVAILABLE) || defined(QNX) > #include <malloc.h> > #else > #include <stdlib.h>- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the "Crypto++ Users" Google Group. To unsubscribe, send an email to [EMAIL PROTECTED] More information about Crypto++ and this group is available at http://www.cryptopp.com. -~----------~----~----~----~------~----~------~--~---
