3

C++ コードをオープン Solaris OS から Redhat 4 OS に移植しました。このコード スニペットでは、エラーが発生しています。

    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);

私が得ているエラーは次のとおりです。

invalid elf header linux

so ファイルを開くことができません。関連するログは次のとおりです。

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
4

2 に答える 2

3

/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/dat/CnEModules/libGCVCore.so: 現在の ar アーカイブ

これは静的ライブラリ (アーカイブ) であり.a、 ではなくである必要があり.soます。では開けませんdlopen

于 2012-07-04T16:24:45.637 に答える
0

libGCVCore.so を Solaris マシンから RedHat マシンにコピーした可能性があります。ほとんどの場合、Solaris マシンは RedHat とは異なるアーキテクチャ (Sparc?) を使用しています。次のように入力して確認できます。

file libGCVCore.so

このコマンドは、リンクしようとしているライブラリのターゲット アーキテクチャに関する情報を出力する必要があります。

于 2012-07-04T10:14:00.170 に答える