| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
August 28, 2005 Some questions | ||||
|---|---|---|---|---|
| ||||
Hi, I'm trying to comile some C++ code and have some problems with the so loved "symbol undefined" errors. I have this class:
File: mk4.h
/// Used to get or set double precision values.
class c4_DoubleRef : public c4_Reference
{
public:
/// Constructor
c4_DoubleRef (const c4_Reference&);
/// Get the value as floating point
operator double () const;
/// Set the value to the specified floating point
c4_DoubleRef& operator= (double);
};
File: mk4.inl
/////////////////////////////////////////////////////////////////////////////
// c4_DoubleRef
d4_inline c4_DoubleRef::c4_DoubleRef (const c4_Reference& value_)
: c4_Reference (value_)
{
}
File: viewx.cpp
c4_DoubleRef::operator double () const
{
c4_Bytes result;
if (!GetData(result))
return 0;
d4_assert(result.Size() == sizeof (double));
return *(const double*) result.Contents();
}
c4_DoubleRef& c4_DoubleRef::operator= (double value_)
{
SetData(c4_Bytes (&value_, sizeof value_));
return *this;
}
And I get this error, when compiling some other code using the library where the above code belongs to:
mkstorage.obj(mkstorage)
Error 42: Symbol Undefined ??Bc4_DoubleRef@@QBENXZ (operator double syscall c4_DoubleRef::(void )const )
mkstorage.obj(mkstorage)
Error 42: Symbol Undefined ??4c4_DoubleRef@@QAEAAV0@N@Z (c4_DoubleRef &syscall c4_DoubleRef::=(double ))
OPTLINK : Warning 134: No Start Address
--- errorlevel 2
Any idea why those two unknown symbols show up? Somehow a reference to the shown signatures must be compiled but I have no idea where this happens. Could it be some implicit conversions? Any hint welcome.
--
Robert M. Münch
Management & IT Freelancer
http://www.robertmuench.de
| ||||
August 31, 2005 Re: Some questions | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Robert M. Münch | I'd check to see that veiwx.obj is being linked in. | |||
September 02, 2005 Re: Some questions | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter | On Wed, 31 Aug 2005 06:35:04 +0200, Walter <newshound@digitalmars.com> wrote: > I'd check to see that veiwx.obj is being linked in. Ok, thanks. I checked to see if viewx.obj contains the functions at all. This is what "libunres -p viewx.obj" gives. (BTW: I didn't remember about libunres.exe) ... ??Bc4_BytesRef@@QBE?AVc4_Bytes@@XZ ??Bc4_IntRef@@QBEJXZ ??Bc4_StringRef@@QBAPBDXZ ??Bc4_ViewRef@@QBE?AVc4_View@@XZ ... So, it seems, it's already not included in the viewx.obj file. How can this happen? -- Robert M. Münch Management & IT Freelancer http://www.robertmuench.de | |||
September 02, 2005 Re: Some questions | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter | On Wed, 31 Aug 2005 06:35:04 +0200, Walter <newshound@digitalmars.com> wrote: > I'd check to see that veiwx.obj is being linked in. Ok, I got some more information, the problem is that: _M_I86SM, M_I86SM Small memory model. Defined for -ms, -mx, -mp, -mf or -mn. I'm using this line to compile my DLL: CFLAGS = -WD -mn -Ae -Ab -Dq4_WIN32 -Dq4_UNIV -Dq4_BOOL -Dq4_INLINE -Dq4_KITDLL -D_USRDLL and this sets _M_I86SM. Is this correct? I thought Win32 always has a large (flat) memory model. I changed the #if part and now it works. -- Robert M. Münch Management & IT Freelancer http://www.robertmuench.de | |||
September 02, 2005 Re: Some questions | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Robert M. Münch | "Robert M. Münch" <robert.muench@robertmuench.de> wrote in message news:op.swg1irql3b5602@news.digitalmars.com... > On Wed, 31 Aug 2005 06:35:04 +0200, Walter <newshound@digitalmars.com> wrote: > > > I'd check to see that veiwx.obj is being linked in. > > Ok, I got some more information, the problem is that: > > _M_I86SM, M_I86SM > Small memory model. Defined for -ms, -mx, -mp, -mf or -mn. > > I'm using this line to compile my DLL: > CFLAGS = -WD -mn -Ae -Ab -Dq4_WIN32 -Dq4_UNIV -Dq4_BOOL -Dq4_INLINE > -Dq4_KITDLL -D_USRDLL > > and this sets _M_I86SM. Is this correct? I thought Win32 always has a > large (flat) memory model. True, but it is technically a "small" memory model. > I changed the #if part and now it works. I'm glad you got it working now. | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply