最近、gcc を 4.1.2 から 5.2.0 にアップグレードしました。
これにより、OCCI ライブラリとのリンケージ エラーが発生しました。
実行しようとしているソースコード:
#include <iostream>
#include <occi.h>
using namespace oracle::occi;
using namespace std;
int main (int argc, char *argv[])
{
Environment *env;
Connection *conn;
oracle::occi::MetaData metaData = conn->getMetaData ((char *)"PERSON_OBJ");
metaData.getString(MetaData::ATTR_NAME);
return(0);
}
リンケージ エラー:
gmake -f /home/davidd/temp.mak CFG=Debug
g++ -g "-Wl,-rpath,/omniqdir/arch/x86_64/release/lib:/omniqdir/instantclient_12_1:/usr/lib,-rpath-link,/omniqdir/arch/x86_64/release/lib:/omniqdir/instantclient_12_1:/usr/lib,-ldl,-lpthread" /omniqdir/arch/x86_64/release/lib/libjemalloc.so -o "Debug/temp" Debug/temp.o /omniqdir/instantclient_12_1/libocci.so /omniqdir/instantclient_12_1/libclntsh.so
Debug/temp.o: In function `main':
temp.cpp:(.text+0xac): undefined reference to `_ZNK6oracle4occi8MetaData9getStringB5**cxx11**ENS1_6AttrIdE'
collect2: error: ld returned 1 exit status
gmake: *** [Debug/temp] Error 1
未定義の参照に c++11 関連のシンボルが含まれていることに気付きました。これは、使用している新しい gcc コンパイラに関係していると思われます。
occiControl.h からの関数宣言
OCCI_STD_NAMESPACE::string getString(MetaData::AttrId属性)
Centos 6.6 と最新の OCCI バージョンの instantclient-basiclite-linux.x64-12.1.0.2.0 を使用しています。
何か案は?
ありがとう、デビッド