invalid elf header linux

c++, gcc

Solution

/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/dat/CnEModules/libGCVCore.so: current ar archive

That's a static library (archive), and should be `.a`, not `.so`. You cannot open it with `dlopen`.

Problem

I have ported a c++ code from an open solaris OS to Redhat 4 OS. In this code snippet iam am getting an error : ``` AsciiFileName = new char [1024]; cout<<"HandleFile is getting called "<<endl; /// Converting the file name to ascii. FileName += strFileName; FileName.ConvertToAscii( AsciiFileName ); /// Get handle to the shared object file. Handle = dlopen( AsciiFileName, RTLD_LOCAL | RTLD_LAZY ); cout<<"Handle = dlopen( AsciiFileName, RTLD_LOCAL | RTLD_LAZY ); is getting called AsciiFileName"<<AsciiFileName<<endl; if (!Handle) { cout<<"Handle is NULL"<<endl; cout<<dlerror()<<endl; exit(EXIT_FAILURE); ``` The error i am getting is : ``` invalid elf header linux ``` It is not able to open the so file.Here is the relevant log for it ``` Before ProcessSharedObject->IterateOnDir GCVDirectoryIterator::IterateOnDir:file name :/bin/ls /trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/dat/CnEModules/*.so GCVDirectoryIterator::IterateOnDir:file opened :/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/dat/CnEModules/libGCVCore.so before GCVDirectoryIterator::AddFile HandleFile is getting called Handle = dlopen( AsciiFileName, RTLD_LOCAL | RTLD_LAZY ); is getting called AsciiFileName/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/dat/CnEModules/libGCVCore.so Handle is NULL /trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/dat/CnEModules/libGCVCore.so: invalid ELF header ```

Original source