PDA

View Full Version : undefined reference



deepakswaroop
2nd March 2011, 06:37
Hi ,
I am trying to call a member function of a class present in a header file(ApnCamera.h)
ApnCamera.h

class CApnCamera
{
public:
CApnCamera();
~CApnCamera();

bool GetDeviceHandle( void *hCamera, char *CameraInfo );

bool InitDriver( unsigned long CamIdA,
unsigned short CamIdB,
unsigned long Option );

bool Expose( double Duration, bool Light );

}

ApnCamera.cpp


CApnCamera::CApnCamera()

{

AltaDebugOutputString( "APOGEE.DLL - CApnCamera::CApnCamera()" );



m_pvtPlatformType = Apn_Platform_Unknown;

m_ApnSensorInfo = NULL;

}

CApnCamera::~CApnCamera()

{

AltaDebugOutputString( "APOGEE.DLL - CApnCamera::~CApnCamera()" );



if ( m_ApnSensorInfo != NULL )

{

delete m_ApnSensorInfo;

m_ApnSensorInfo = NULL;

CloseDriver();
}

}
bool CApnCamera::Expose( double Duration, bool Light )

{

unsigned long ExpTime;

unsigned short BitsPerPixel;

unsigned short UnbinnedRoiX;

unsigned short UnbinnedRoiY;

unsigned short PreRoiSkip, PostRoiSkip;

unsigned short PreRoiRows, PostRoiRows;

unsigned short PreRoiVBinning, PostRoiVBinning;



unsigned short RegVal;

unsigned short RoiRegBuffer[15];

unsigned short RoiRegData[15];



unsigned short TotalHPixels;

unsigned short TotalVPixels;



unsigned long TestImageSize;



unsigned long WaitCounter;



char szOutputText[128];
UnbinnedRoiY = m_pvtRoiPixelsV * m_pvtRoiBinningV;



PreRoiRows = m_ApnSensorInfo->m_UnderscanRows +

m_pvtRoiStartY;



PostRoiRows = m_ApnSensorInfo->m_TotalRows -

PreRoiRows -

UnbinnedRoiY;



TotalVPixels = UnbinnedRoiY + PreRoiRows + PostRoiRows;


// Program the horizontal settings

RoiRegBuffer[1] = FPGA_REG_PREROI_SKIP_COUNT;

RoiRegData[1] = PreRoiSkip;



RoiRegBuffer[2] = FPGA_REG_ROI_COUNT;



// Number of ROI pixels. Adjust the 12bit operation here to account for an extra

// 10 pixel shift as a result of the A/D conversion.

if ( m_pvtDataBits == Apn_Resolution_SixteenBit )

{

RoiRegData[2] = m_pvtExposurePixelsH + 1;

}

else if ( m_pvtDataBits == Apn_Resolution_TwelveBit )

{

RoiRegData[2] = m_pvtExposurePixelsH + 12;

}



RoiRegBuffer[3] = FPGA_REG_POSTROI_SKIP_COUNT;

RoiRegData[3] = PostRoiSkip;



// Program the vertical settings

if ( m_pvtFirmwareVersion < 11 )

{

RoiRegBuffer[4] = FPGA_REG_A1_ROW_COUNT;

RoiRegData[4] = PreRoiRows;

RoiRegBuffer[5] = FPGA_REG_A1_VBINNING;

RoiRegData[5] = PreRoiVBinning;



RoiRegBuffer[6] = FPGA_REG_A2_ROW_COUNT;

RoiRegData[6] = m_pvtRoiPixelsV;

RoiRegBuffer[7] = FPGA_REG_A2_VBINNING;

RoiRegData[7] = (m_pvtRoiBinningV | FPGA_BIT_ARRAY_DIGITIZE);



RoiRegBuffer[8] = FPGA_REG_A3_ROW_COUNT;

RoiRegData[8] = PostRoiRows;

RoiRegBuffer[9] = FPGA_REG_A3_VBINNING;

RoiRegData[9] = PostRoiVBinning;



RoiRegBuffer[10] = FPGA_REG_SCRATCH;

RoiRegData[10] = 0;

RoiRegBuffer[11] = FPGA_REG_SCRATCH;

RoiRegData[11] = 0;

RoiRegBuffer[12] = FPGA_REG_SCRATCH;

RoiRegData[12] = 0;

RoiRegBuffer[13] = FPGA_REG_SCRATCH;

RoiRegData[13] = 0;

}

else

{

if ( m_ApnSensorInfo->m_EnableSingleRowOffset )

{

RoiRegBuffer[4] = FPGA_REG_A1_ROW_COUNT;

RoiRegData[4] = 0;

RoiRegBuffer[5] = FPGA_REG_A1_VBINNING;

RoiRegData[5] = 0;



RoiRegBuffer[6] = FPGA_REG_A2_ROW_COUNT;

RoiRegData[6] = PreRoiRows;

RoiRegBuffer[7] = FPGA_REG_A2_VBINNING;

RoiRegData[7] = PreRoiVBinning;



RoiRegBuffer[8] = FPGA_REG_A3_ROW_COUNT;

RoiRegData[8] = m_pvtRoiPixelsV;

RoiRegBuffer[9] = FPGA_REG_A3_VBINNING;

RoiRegData[9] = (m_pvtRoiBinningV | FPGA_BIT_ARRAY_DIGITIZE);



RoiRegBuffer[10] = FPGA_REG_A4_ROW_COUNT;

RoiRegData[10] = 0;

RoiRegBuffer[11] = FPGA_REG_A4_VBINNING;

RoiRegData[11] = 0;



RoiRegBuffer[12] = FPGA_REG_A5_ROW_COUNT;

RoiRegData[12] = PostRoiRows;

RoiRegBuffer[13] = FPGA_REG_A5_VBINNING;

RoiRegData[13] = PostRoiVBinning;

}

else

{

if ( PreRoiRows > 70 )

{

RoiRegBuffer[4] = FPGA_REG_A1_ROW_COUNT;

RoiRegData[4] = 1;

RoiRegBuffer[5] = FPGA_REG_A1_VBINNING;

RoiRegData[5] = (PreRoiRows-70);



RoiRegBuffer[6] = FPGA_REG_A2_ROW_COUNT;

RoiRegData[6] = 70;

RoiRegBuffer[7] = FPGA_REG_A2_VBINNING;

RoiRegData[7] = 1;

}

else

{

RoiRegBuffer[4] = FPGA_REG_A1_ROW_COUNT;

RoiRegData[4] = 0;

RoiRegBuffer[5] = FPGA_REG_A1_VBINNING;

RoiRegData[5] = 0;



RoiRegBuffer[6] = FPGA_REG_A2_ROW_COUNT;

RoiRegData[6] = PreRoiRows;

RoiRegBuffer[7] = FPGA_REG_A2_VBINNING;

RoiRegData[7] = PreRoiVBinning;

}



RoiRegBuffer[8] = FPGA_REG_A3_ROW_COUNT;

RoiRegData[8] = m_pvtRoiPixelsV;

RoiRegBuffer[9] = FPGA_REG_A3_VBINNING;

RoiRegData[9] = (m_pvtRoiBinningV | FPGA_BIT_ARRAY_DIGITIZE);



if ( PostRoiRows > 70 )

{

RoiRegBuffer[10] = FPGA_REG_A4_ROW_COUNT;

RoiRegData[10] = 1;

RoiRegBuffer[11] = FPGA_REG_A4_VBINNING;

RoiRegData[11] = (PostRoiRows-70);



RoiRegBuffer[12] = FPGA_REG_A5_ROW_COUNT;

RoiRegData[12] = 70;

RoiRegBuffer[13] = FPGA_REG_A5_VBINNING;

RoiRegData[13] = 1;

}

else

{

RoiRegBuffer[10] = FPGA_REG_A4_ROW_COUNT;

RoiRegData[10] = 0;

RoiRegBuffer[11] = FPGA_REG_A4_VBINNING;

RoiRegData[11] = 0;



RoiRegBuffer[12] = FPGA_REG_A5_ROW_COUNT;

RoiRegData[12] = PostRoiRows;

RoiRegBuffer[13] = FPGA_REG_A5_VBINNING;

RoiRegData[13] = PostRoiVBinning;

}

}

}



// Issue the reset

RoiRegBuffer[14] = FPGA_REG_COMMAND_B;

RoiRegData[14] = FPGA_BIT_CMD_RESET;



// Send the instruction sequence to the camera

AltaDebugOutputString( "APOGEE.DLL - CApnCamera::Expose() -> Issue WriteMultiMRMD() for Exposure setup" );

WriteMultiMRMD( RoiRegBuffer, RoiRegData, 15 );



// Handle the IR PreFlash, if enabled

if ( m_pvtPreFlashEnable )

{

double strobeVal = read_ShutterStrobePosition();

double preflashVal = m_ApnSensorInfo->m_IRPreflashTime / 1000;



// v22 only

preflashVal = 110/1000;



write_ShutterStrobePosition( preflashVal );



// set the preflash bit

Read( FPGA_REG_OP_B, RegVal );

RegVal |= FPGA_BIT_IR_PREFLASH_ENABLE;

Write( FPGA_REG_OP_B, RegVal );



// dark frame duration is based on our sensor's specified preflash time

TakeNoDataDarkExposure( preflashVal + 0.050 );



// set the preflash bit back to zero

Read( FPGA_REG_OP_B, RegVal );

RegVal &= ~FPGA_BIT_IR_PREFLASH_ENABLE;

Write( FPGA_REG_OP_B, RegVal );



// set our shutter strobe back

write_ShutterStrobePosition( strobeVal );



// Re-calculate the exposure time to program to the camera

ExpTime = ((unsigned long)(Duration / m_PlatformTimerResolution)) + m_PlatformTimerOffsetCount;



// reprogram the timer

Write( FPGA_REG_TIMER_LOWER, (unsigned short)(ExpTime & 0xFFFF));

ExpTime = ExpTime >> 16;

Write( FPGA_REG_TIMER_UPPER, (unsigned short)(ExpTime & 0xFFFF));



ResetSystemNoFlush();



// Send the instruction sequence to the camera

AltaDebugOutputString( "APOGEE.DLL - CApnCamera::Expose() -> Issue WriteMultiMRMD() for Exposure setup" );

WriteMultiMRMD( RoiRegBuffer, RoiRegData, 15 );

}



// Issue the flush for interlines, or if using the external shutter

if ( (m_ApnSensorInfo->m_InterlineCCD && m_pvtFastSequence) ||

(m_pvtExternalShutter) ||

(m_pvtTriggerNormalGroup) || (m_pvtTriggerTdiKineticsGroup) )

{

// Make absolutely certain that flushing starts first

// in order to use Progressive Scan/Ratio Mode

Write( FPGA_REG_COMMAND_A, FPGA_BIT_CMD_FLUSH );



for ( int i=0; i<2; i++ )

{

Write( FPGA_REG_SCRATCH, 0x8086 );

Write( FPGA_REG_SCRATCH, 0x8088 );

}

}



m_pvtExposureExternalShutter = m_pvtExternalShutter;



IssueExposeCommand( Light );



// Set our flags to mark the start of a new exposure

m_pvtImageInProgress = true;

m_pvtImageReady = false;



// Debug output for leaving this function

sprintf( szOutputText, "APOGEE.DLL - CApnCamera::Expose( Duration = %f, Light = %d ) -> END", Duration, Light );

AltaDebugOutputString( szOutputText );



return true;

}





ourcode.cpp


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include"fitsio.h"
#include<math.h>
#include <unistd.h>
#include <time.h>
#include"tcl.h"
#include"ApnCamera.h"
double a;
bool asd,cond;

namespace x
{
CApnCamera *al=(CApnCamera *)new CApnCamera();
};

int main(int argc,char **argv)
{
a=0.5;
cond=true;
using namespace x;
al->Expose(a,cond);
if(asd)
printf("Initialized Properly");
delete al;
}


When we execute we get the following error in Build Issues
/home/subhash/testing-build-desktop/../testing/main.cpp:31: error: undefined reference to `CApnCamera::Expose(double, bool)'
:: error: collect2: ld returned 1 exit status


And in compile output we get
main.o: In function `main':
/home/subhash/testing-build-desktop/../testing/main.cpp:31: undefined reference to `CApnCamera::Expose(double, bool)'
make: Leaving directory `/home/subhash/testing-build-desktop'
collect2: ld returned 1 exit status
make: *** [testing] Error 1
The process "/usr/bin/make" exited with code %2.
Error while building project testing (target: Desktop)
When executing build step 'Make'

franz
2nd March 2011, 06:46
Did ApnCamera.cpp get built?