首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与gcc 5的OCCI联动误差

与gcc 5的OCCI联动误差
EN

Stack Overflow用户
提问于 2015-08-31 10:20:46
回答 2查看 1.5K关注 0票数 1

最近我把我的gcc从4.1.2升级到5.2.0。

这导致OCCI库的链接错误:

我试图运行的源代码:

代码语言:javascript
复制
#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);
}

链接错误:

代码语言:javascript
复制
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(元数据::attrid attrid)

我正在使用CentOS6.6和最新的OCCI版本,即实例化客户机-Basiclit-linux.x64-12.1.0.2.0。

有什么想法吗?

谢谢你,大卫

EN

回答 2

Stack Overflow用户

发布于 2015-11-22 16:16:31

这几乎可以肯定是因为gcc 5中的新ABI和OCCI库所期望的ABI之间不兼容。

  • OCCI图书馆显然是使用gcc 4.x创建的
  • gcc 5引入了一种新的ABI,其中包括std::string的“短字符串优化”,它与C++11兼容(它不允许gcc 4.x中使用的std::string的引用计数实现)。

在构建代码之前,您可以尝试将_GLIBCXX_USE_CXX11_ABI定义为0,这将导致gcc 5使用旧的ABI。

  • 请注意,必须使用相同的ABI编译所有内容才能协同工作,因此您可能希望设置一个全局构建标志。(例如,使用-DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=0“,您可以将CMake添加到CMake命令行)。

另外,请注意,在尝试使用带有clang的OCCI进行构建及其libc++ (http://libcxx.llvm.org/)的实现时,也存在类似的问题。(这是咬我的那个)。

您可以在以下网站了解更多信息:https://gcc.gnu.org/gcc-5/changes.html#libstdcxxabi.html

票数 5
EN

Stack Overflow用户

发布于 2018-04-06 14:02:06

我在Solaris 11中也遇到了类似的问题。通过Linker选项解决了这个问题:

-m64 -lCstd

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32309029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档