[C++-sig] Memory allocation problem

Nariman Habili n_habili at hotmail.com
Mon Sep 5 07:22:41 CEST 2005


Hi,

I'm developing a Boost Python application that links with a number of other 
libraries. I'm using Python version 2.3, and bjam version 3.1.10. All of the 
libraries have been compiled with the /MDd option using the MVS IDE, 
compiler vc7. The first issue I had was a linking problem, with error 
messages such as:

LIBCMTD.lib(dosmap.obj) : error LNK2005: __errno already defined in 
MSVCRTD.lib(MSVCR70D.dll)
MSVCRTD.lib(MSVCR70D.dll) : error LNK2005: __open already defined in 
LIBCMTD.lib(open.obj)

I was able to eliminate the error messages by executing the linking command 
manually with the option /NODEFAULTLIB:LIBCMTD.lib.

I have come across another problem which I haven't been able to resolve. A 
struct, called ImageParams, is defined in a header file of library 
kernel.lib. Within my boost python application std::cout << 
sizeof(ImageParams) gives 240 bytes, while in kernel.lib, 
sizeof(ImageParams) is 248 bytes. Because of the discrepancy in the amount 
of memory allocated, I'm running into all sorts of trouble, and I can't work 
out why the allocated memories should be different. The only thing I can 
think of is that my boost python application is inlining the struct, and 
because of some option setting, the struct is padded differently to achieve 
word or paragraph alignment.

I've looked at the command that boost python executes to create the .obj 
files, and I've modified the compiler options for kernel.lib in the MVS IDE 
to match those executed by boost python, to no avail, however I might be 
missing something. I would be very grateful if anyone can help me to solve 
this problem, thanks.

Regards,
Nari





More information about the Cplusplus-sig mailing list