2011-07-28 3 views
2

IBM提供のC++ Object Interfaceを使用して以下のコードを書いています。私は(Linux)のRHEL上でそれをコンパイルしようとしています:LinuxでC++を使用してInformixデータベースをクエリするにはどうすればよいですか? C++用オブジェクト・インタフェース使用時のコンパイル・エラーの取得

#include <it.h> 
#include <iostream.h> 

int main() { 
    ITDBInfo db("dbname","user","pwd","system"); 
    ITConnection conn(db); 
    conn.Open(); 

    if (conn.Error()) { 
     cout << "Couldn't open connection" << endl; 
     return -1; 
    } 

    ITQuery query(conn);  
    ITRow *row; 
    if(!(row = query.ExecOneRow("select lname from customer;"))) { 
     cout << "Couldn't select from table customer" << endl; 
     return -1; 
    } 

    while ((row = query.NextRow()) != NULL) { 
     cout << row->Printable() << endl; 
    } 

    row->Release(); 
    conn.Close(); 
} 

次のようにLinux上でコンパイルしている間:私はエラーを取得しています

g++ -Wno-deprecated -I/opt/Informix/11.5FC8/incl/c++ \ 
    -I/opt/Informix/11.5FC8/incl/public \ 
    -L/opt/Informix/11.5FC8/lib/c++ -g -o test1 test1.cpp 

は以下の通り:ディレクトリ

/tmp/cchJkPb1.o: In function `main': 
test1.cpp:(.text+0x82): undefined reference to `ITString::ITString(char const*)' 
test1.cpp:(.text+0x90): undefined reference to `ITString::ITString(char const*)' 
test1.cpp:(.text+0x9e): undefined reference to `ITString::ITString(char const*)' 
test1.cpp:(.text+0xac): undefined reference to `ITString::ITString(char const*)' 
test1.cpp:(.text+0xc8): undefined reference to `ITDBInfo::ITDBInfo(ITString const&, ITString const&, ITString const&, ITString const&)' 
test1.cpp:(.text+0xd1): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0xea): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0xfc): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0x115): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0x127): undefined reference to `ITString::~ITString()' 
/tmp/cchJkPb1.o:test1.cpp:(.text+0x140): more undefined references to `ITString::~ITString()' follow 
/tmp/cchJkPb1.o: In function `main': 
test1.cpp:(.text+0x15f): undefined reference to `ITConnection::ITConnection(ITDBInfo const&)' 
test1.cpp:(.text+0x178): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0x194): undefined reference to `ITConnection::Open()' 
test1.cpp:(.text+0x19d): undefined reference to `ITErrorManager::Error() const' 
test1.cpp:(.text+0x1e6): undefined reference to `ITQuery::ITQuery(ITConnection const&)' 
test1.cpp:(.text+0x1f4): undefined reference to `ITString::ITString(char const*)' 
test1.cpp:(.text+0x209): undefined reference to `ITQuery::ExecOneRow(ITString const&, ITEssential**)' 
test1.cpp:(.text+0x222): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0x23b): undefined reference to `ITString::~ITString()' 
test1.cpp:(.text+0x2a6): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, ITString const&)' 
test1.cpp:(.text+0x2c4): undefined reference to `ITQuery::NextRow(ITEssential**)' 
test1.cpp:(.text+0x2f1): undefined reference to `ITConnection::Close()' 
test1.cpp:(.text+0x317): undefined reference to `ITQuery::~ITQuery()' 
test1.cpp:(.text+0x32c): undefined reference to `ITQuery::~ITQuery()' 
test1.cpp:(.text+0x366): undefined reference to `ITConnection::~ITConnection()' 
test1.cpp:(.text+0x378): undefined reference to `ITConnection::~ITConnection()' 
test1.cpp:(.text+0x3b2): undefined reference to `ITDBInfo::~ITDBInfo()' 
test1.cpp:(.text+0x3ce): undefined reference to `ITDBInfo::~ITDBInfo()' 
collect2: ld returned 1 exit status 

/opt/Informix/11.5FC8/lib/c++はLD_LIBRARY_PATHにリストされます。誰も私がこれらのエラーを取り除くのを助けることができますか?

+2

これらはリンクエラーであり、コンパイルエラーではありません。どういうわけか、リンカは正しいライブラリを見つけられません。 –

+0

申し訳ありません:)。修正のおかげで。私のg ++​​コマンドに何か問題はありますか?私は正しいパスをリンクしていると思う。 – mumbaikar

+1

あなたは何かとリンクしているわけではありません。あなたは実際に '-l ... 'でライブラリ名を言う必要があります。 –

答えて

2

実際には、-lコマンドラインパラメータを使用してライブラリにリンクしていません。 -Lコマンドラインパラメーターは、リンカーに探す場所をリンカーに指示しますが、実際のライブラリーは指定しません。

LD_LIBRARY_PATHも実行時に使用されますが、非標準ディレクトリを設定するより良い方法は、/etc/ld.so.confまたは/etc/ld.so.conf.d/のファイルを使用してダイナミックリンカを設定することです。

+0

ありがとう。私はLinuxに堪能ではない。しかし、それは役に立ちました。 – mumbaikar

関連する問題