当捕获到异常_should_时,调试“抛出...的实例后调用终止”

布马特

我正在调试一个似乎仅在Solaris上发生的问题(我们在Windows,Linux,OSX,Solaris,HP-UX和AIX上进行测试)。

我们的代码抛出一个异常(这是完全可以预料的),这导致打印出“抛出...实例后调用终止”的消息,并终止该过程。

(dbx) where -h
current thread: t@1
dbx: forward reference `Connection' not defined, see `help forwardref'
  [1] __lwp_kill(0x0, 0x6, 0x0, 0x6, 0xffbffeff, 0x0), at 0xff2ce364
  [2] raise(0x6, 0x0, 0x0, 0xff2ad954, 0xffffffff, 0x6), at 0xff267958
  [3] abort(0x132cb0, 0x1, 0xff122f38, 0xedbe0, 0xff333558, 0x0), at 0xff242910
=>[4] __gnu_cxx::__verbose_terminate_handler(), line 95 in "vterminate.cc"
  [5] __cxxabiv1::__terminate(handler = 0xff125098 = &__gnu_cxx::__verbose_terminate_handler()), line 47 in "eh_terminate.cc"
  [6] std::terminate(), line 57 in "eh_terminate.cc"
  [7] __cxa_throw(obj = 0x132cf8, tinfo = 0xfef2bf2c, dest = 0xfe204240 = &Simba::Support::ErrorException::~ErrorException()), line 87 in "eh_throw.cc"
  [8] Simba::ODBC::ConnectionAttributes::SetAttribute(this = 0x12a060, in_attribute = <value unavailable>, in_value = 0x132c78, in_length = -3), line 299 in "ConnectionAttributes.cpp"

Simba::Support::ErrorException 消息抱怨的类型,我们在ConnectionAttributes.cpp的第299行抛出了它的一个实例,但是据我所知,这不应导致std :: terminate()抛出,因为:

  • 据我所知,这不是在先前异常提示的堆栈展开期间从析构函数抛出的(我在异常类型的构造函数中添加了跟踪,并且在崩溃之前仅调用了一次)
  • 当前线程的堆栈上至少有一个框架catch (Simba::Support::ErrorException&)(肯定的是,同一框架上也有catch (...)),上面可能还有其他框架应该捕获异常。

还有什么其他原因呢?我是否缺少逻辑?

鉴于它仅在Solaris上发生,因此我在考虑运行时的某些问题?

编辑:更多细节

  • uname -a 在机器上的输出: SunOS b3-sol10spr-01 5.10 Generic_147440-01 sun4v sparc sun4v
  • 我们正在使用GCC 4.9.2进行构建
  • 这是在SPARC机器上发生的,但是以前,我们还有其他与Solaris x86上的异常相关的问题:由无效异常展开引起的崩溃?
  • 在驱动程序编译期间使用的标志: -DSIZEOF_LONG_INT=4 -DSQL_WCHART_CONVERT -DHAVE_LONG_LONG -m32 -fPIC -pthread -Wall -Wno-unknown-pragmas -DSIMBA -D_REENTRANT -DCLUNIX -DNDEBUG -D_POSIX_PTHREAD_SEMANTICS -O0 -g -D_DEBUG
  • 在驱动程序链接期间使用的标志:(-DSIMBA -D_REENTRANT -m32 -fPIC -pthread -Wall -Wno-unknown-pragmas -O1 -g -shared -mimpure-text -static-libgcc -Wl,-M,exports_Solaris.map跳过了一堆-lxxx)

共享库的LDD输出(包含有问题的代码)

        libicudata_sb32.so.53 =>         /bamboo/Adhoc/ThirdParty/icu/53.1.x/solaris10sparc/gcc4_9/release32/lib/libicudata_sb32.so.53
        libicui18n_sb32.so.53 =>         /bamboo/Adhoc/ThirdParty/icu/53.1.x/solaris10sparc/gcc4_9/release32/lib/libicui18n_sb32.so.53
        libicuuc_sb32.so.53 =>   /bamboo/Adhoc/ThirdParty/icu/53.1.x/solaris10sparc/gcc4_9/release32/lib/libicuuc_sb32.so.53
        libpthread.so.1 =>       /lib/libpthread.so.1
        librt.so.1 =>    /lib/librt.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libsocket.so.1 =>        /lib/libsocket.so.1
        libresolv.so.2 =>        /lib/libresolv.so.2
        libxnet.so.1 =>  /lib/libxnet.so.1
        libgssapi_krb5.so.2 =>   /opt/csw/lib/libgssapi_krb5.so.2
        libkrb5.so.3 =>  /opt/csw/lib/libkrb5.so.3
        libkrb5support.so.0 =>   /opt/csw/lib/libkrb5support.so.0
        libk5crypto.so.3 =>      /opt/csw/lib/libk5crypto.so.3
        libcom_err.so.3 =>       /opt/csw/lib/libcom_err.so.3
        libm.so.2 =>     /lib/libm.so.2
        libc.so.1 =>     /lib/libc.so.1
        libgcc_s.so.1 =>         /opt/csw/lib/libgcc_s.so.1
        libaio.so.1 =>   /lib/libaio.so.1
        libmd.so.1 =>    /lib/libmd.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libscf.so.1 =>   /lib/libscf.so.1
        libintl.so.8 =>  /opt/csw/lib/sparcv8/libintl.so.8
        libdoor.so.1 =>  /lib/libdoor.so.1
        libuutil.so.1 =>         /lib/libuutil.so.1
        libgen.so.1 =>   /lib/libgen.so.1
        libiconv.so.2 =>         /opt/csw/lib/sparcv8/libiconv.so.2
        /lib/libm/libm_hwcap1.so.2
        /platform/sun4v/lib/libc_psr.so.1
        /platform/sun4v/lib/libmd_psr.so.1

iodbctest的LDD输出(不确定如何构建)

        libdl.so.1 =>    /lib/libdl.so.1
        libc.so.1 =>     /lib/libc.so.1
        libm.so.2 =>     /lib/libm.so.2
        /lib/libm/libm_hwcap1.so.2
        /platform/sun4v/lib/libc_psr.so.1

另外,对于有人问,如果我将dbx设置为打破异常,我首先要在此栈上打破

(dbx) where -h
current thread: t@1
dbx: forward reference `Connection' not defined, see `help forwardref'
=>[1] __cxa_throw(obj = 0x13a268, tinfo = 0xfef2bf2c, dest = 0xfe204240 = &Simba::Support::ErrorException::~ErrorException()), line 65 in "eh_throw.cc"
  [2] Simba::ODBC::ConnectionAttributes::SetAttribute(this = 0x12d5d0, in_attribute = <value unavailable>, in_value = 0x13a1e8, in_length = -3), line 299 in "ConnectionAttributes.cpp"

然后如果我继续,它会在前面提到的位置崩溃。

编辑2:调用终止时,这里还有更多的堆栈框架:

(dbx) where -h
current thread: t@1
dbx: forward reference `Connection' not defined, see `help forwardref'
  [1] __lwp_kill(0x0, 0x6, 0x0, 0x6, 0xffbffeff, 0x0), at 0xff2ce364
  [2] raise(0x6, 0x0, 0x0, 0xff2ad954, 0xffffffff, 0x6), at 0xff267958
  [3] abort(0x132cb0, 0x1, 0xff122f38, 0xedbe0, 0xff333558, 0x0), at 0xff242910
=>[4] __gnu_cxx::__verbose_terminate_handler(), line 95 in "vterminate.cc"
  [5] __cxxabiv1::__terminate(handler = 0xff125098 = &__gnu_cxx::__verbose_terminate_handler()), line 47 in "eh_terminate.cc"
  [6] std::terminate(), line 57 in "eh_terminate.cc"
  [7] __cxa_throw(obj = 0x132cf8, tinfo = 0xfef2bf2c, dest = 0xfe204240 = &Simba::Support::ErrorException::~ErrorException()), line 87 in "eh_throw.cc"
  [8] Simba::ODBC::ConnectionAttributes::SetAttribute(this = 0x12a060, in_attribute = <value unavailable>, in_value = 0x132c78, in_length = -3), line 299 in "ConnectionAttributes.cpp"
  [9] Simba::ODBC::ConnectionState::SQLSetConnectAttr(this = <value unavailable>, in_connection = 0x129e08, Attribute = 1051, ValuePtr = 0x132c78, StringLength = -3), line 495 in "ConnectionState.cpp"
  [10] Simba::ODBC::ConnectionState2::SQLSetConnectAttr(this = 0xd7a30, in_connection = 0x129e08, Attribute = 1051, ValuePtr = 0x132c78, StringLength = -3), line 526 in "ConnectionState2.cpp"
  [11] Simba::ODBC::Connection::SQLSetConnectAttr(this = 0x129e08, Attribute = 1051, ValuePtr = 0x132c78, StringLength = -3), line 1746 in "Connection.cpp"
  [12] Simba::ODBC::SQLSetConnectAttrTask<true>::DoSynchronously(, line 266 in "SQLSetConnectAttrTask.h"
  [13] DoTask<Simba::ODBC::SQLSetConnectAttrTask<true> >(in_functionName = 0xfea68b10 "SQLSetConnectAttr", in_handle = 0x2, in_parameters = STRUCT), line 638 in "CInterface.cpp"
  [14] SQLSetConnectAttrW(ConnectionHandle = 0x2, Attribute = 1051, Value = 0x132c78, StringLength = -3), line 4053 in "CInterface.cpp"
  [15] _iodbcdm_SetConnectOption_init(0x9a568, 0x41b, 0x7b4a0, 0x41, 0x99e68, 0xffffefc8), at 0x23ae0
  [16] _iodbcdm_driverload(0xffbfec10, 0xffbfec40, 0x9a568, 0x1, 0x0, 0x41), at 0x26458
  [17] SQLDriverConnect_Internal(0x9a568, 0x0, 0xffbff590, 0xfffffffd, 0x98dc0, 0x1000), at 0x2a72c
  [18] SQLDriverConnect(0x9a568, 0x0, 0xffbff590, 0xfffffffd, 0x98dc0, 0x1000), at 0x2b7e0
  [19] ODBC_Connect(0xffbffb7b, 0x98c80, 0x0, 0x98c9e, 0xff3303ec, 0x4), at 0x16638
  [20] main(0x2, 0xffbffa7c, 0xffbffa88, 0x99dc0, 0xff3700c0, 0x0), at 0x1837c

另外,我已经确认iodbctest实际上是用gcc构建的

Making all in samples
gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../include -I../include -DNO_FRAMEWORKS   -DWITH_PTHREADS -D_REENTRANT  -m32 -DODBCVER=0x0350 -DIODBC_BUILD=8120326 -MT iodbctest.o -MD -MP -MF .deps/iodbctest.Tpo -c -o iodbctest.o iodbctest.c
mv -f .deps/iodbctest.Tpo .deps/iodbctest.Po
/bin/bash ../libtool --tag=CC    --mode=link gcc -std=gnu99  -m32 -DODBCVER=0x0350 -DIODBC_BUILD=8120326  -static -m32 -o iodbctest iodbctest.o ../iodbc/libiodbc.la 
libtool: link: gcc -std=gnu99 -m32 -DODBCVER=0x0350 -DIODBC_BUILD=8120326 -m32 -o iodbctest iodbctest.o  ../iodbc/.libs/libiodbc.a -ldl

编辑3:这是.so的链接命令

/opt/csw/gcc4/bin/g++ -DSIMBA -D_REENTRANT -m32 -fPIC -pthread  -Wall -Wno-unknown-pragmas  -lrt   -O1 -g  -shared API/ImpalaClient_solaris10sparc_gcc4_9_release32.cpp.o API/ImpalaTCLIServiceThreadSafeClient_solaris10sparc_gcc4_9_release32.cpp.o Core/ImpalaConnection_solaris10sparc_gcc4_9_release32.cpp.o Core/ImpalaDriver_solaris10sparc_gcc4_9_release32.cpp.o Core/ImpalaEnvironment_solaris10sparc_gcc4_9_release32.cpp.o Core/ImpalaStatement_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaAggregateFunction_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaCaseInsensitiveMetadataResult_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaDataEngine_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaDSIExtQueryExecutor_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaFetchThread_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaNativeQueryExecutor_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaPlaceholderTable_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaResultSet_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/ImpalaScalarFunction_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/Metadata/ImpalaColumnsMetadataSource_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/Metadata/ImpalaMetadataHelper_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/Metadata/ImpalaTablesMetadataSource_solaris10sparc_gcc4_9_release32.cpp.o DataEngine/Metadata/ImpalaTypeInfoMetadataSource_solaris10sparc_gcc4_9_release32.cpp.o QueryTranslation/ImpalaSQLGenerator_solaris10sparc_gcc4_9_release32.cpp.o Utilities/ImpalaTypeUtilities_solaris10sparc_gcc4_9_release32.cpp.o Utilities/ImpalaUtilities_solaris10sparc_gcc4_9_release32.cpp.o ../ThirdParty/ImpalaClients_Thrift_0_9_0/TCLIServiceClient/src/TCLIService_solaris10sparc_gcc4_9_release32.cpp.o ../ThirdParty/ImpalaClients_Thrift_0_9_0/TCLIServiceClient/src/TCLIService_constants_solaris10sparc_gcc4_9_release32.cpp.o ../ThirdParty/ImpalaClients_Thrift_0_9_0/TCLIServiceClient/src/TCLIService_types_solaris10sparc_gcc4_9_release32.cpp.o Main_Unix_solaris10sparc_gcc4_9_release32.cpp.o     -mimpure-text -static-libgcc -L./solaris10sparc/gcc4_9/release32 -L/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/icu/53.1.x/solaris10sparc/gcc4_9/release32/lib -licudata_sb32 -licui18n_sb32 -licuuc_sb32 -lpthread -lm -Wl,-M,exports_Solaris.map -lrt -lnsl -lsocket -lresolv -lxnet -Wl,-M,exports_Solaris.map -Wl,-zallextract,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libSimbaODBC.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libSimbaDSI.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libSimbaSupport.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libAEProcessor.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libCore.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libDSIExt.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libExecutor.a,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libParser.a,/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/KerberosSupport/Maintenance/10.1/Lib/solaris10sparc/gcc4_9/release32/libKerberosSupport.a,/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/ThriftExtension/0.9.0/Maintenance/10.1/Lib/solaris10sparc/gcc4_9/release32/libThriftExtension.a,/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/DriverSupport/Maintenance/10.1/Lib/solaris10sparc/gcc4_9/release32/libDriverSupport.a -Wl,-zweakextract,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/openssl/1.1.0/solaris10sparc/gcc4_9/release32/lib/libssl.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/openssl/1.1.0/solaris10sparc/gcc4_9/release32/lib/libcrypto.a,/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/cyrus-sasl/2.1.26/saslGSSAPI/Maintenance/1.0/Binaries/solaris10sparc/gcc4_9/release32/lib/libsasl2.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_date_time.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_regex.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_thread.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_system.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/thrift/0.9.0_openssl1.1.0_boost1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libthrift.a,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_atomic.a,/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/cyrus-sasl/2.1.26/saslGSSAPI/Maintenance/1.0/Binaries/solaris10sparc/gcc4_9/release32/lib/sasl2/libgs2.a -L/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/MIT_Kerberos/1.14/solaris10sparc/gcc4_9/release32/lib -lgssapi_krb5 -lkrb5 -lkrb5support -lk5crypto -lcom_err -o ../Bin/solaris10sparc/gcc4_9/release32/libimpalaodbc_sb32.so
安德鲁·汉勒

如果要创建由非C ++可执行文件加载的C ++共享库,则需要确保C ++共享库对正确的C ++运行时库具有动态依赖关系。

使用C可执行文件加载的C ++共享库与libstdc++.so共享库无关

此链接命令用于共享对象:

/opt/csw/gcc4/bin/g++ -DSIMBA -D_REENTRANT -m32 -fPIC -pthread
-Wall -Wno-unknown-pragmas  -lrt   -O1 -g  -shared 
API/ImpalaClient_solaris10sparc_gcc4_9_release32.cpp.o 
API/ImpalaTCLIServiceThreadSafeClient_solaris10sparc_gcc4_9_release32.cpp.o
Core/ImpalaConnection_solaris10sparc_gcc4_9_release32.cpp.o 
Core/ImpalaDriver_solaris10sparc_gcc4_9_release32.cpp.o 
Core/ImpalaEnvironment_solaris10sparc_gcc4_9_release32.cpp.o 
Core/ImpalaStatement_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaAggregateFunction_solaris10sparc_gcc4_9_release32.cpp.o
 DataEngine/ImpalaCaseInsensitiveMetadataResult_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaDataEngine_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaDSIExtQueryExecutor_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaFetchThread_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaNativeQueryExecutor_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaPlaceholderTable_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaResultSet_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/ImpalaScalarFunction_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/Metadata/ImpalaColumnsMetadataSource_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/Metadata/ImpalaMetadataHelper_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/Metadata/ImpalaTablesMetadataSource_solaris10sparc_gcc4_9_release32.cpp.o
DataEngine/Metadata/ImpalaTypeInfoMetadataSource_solaris10sparc_gcc4_9_release32.cpp.o
QueryTranslation/ImpalaSQLGenerator_solaris10sparc_gcc4_9_release32.cpp.o
Utilities/ImpalaTypeUtilities_solaris10sparc_gcc4_9_release32.cpp.o
Utilities/ImpalaUtilities_solaris10sparc_gcc4_9_release32.cpp.o
../ThirdParty/ImpalaClients_Thrift_0_9_0/TCLIServiceClient/src/TCLIService_solaris10sparc_gcc4_9_release32.cpp.o
../ThirdParty/ImpalaClients_Thrift_0_9_0/TCLIServiceClient/src/TCLIService_constants_solaris10sparc_gcc4_9_release32.cpp.o
../ThirdParty/ImpalaClients_Thrift_0_9_0/TCLIServiceClient/src/TCLIService_types_solaris10sparc_gcc4_9_release32.cpp.o
Main_Unix_solaris10sparc_gcc4_9_release32.cpp.o     -mimpure-text -static-libgcc
-L./solaris10sparc/gcc4_9/release32
-L/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/icu/53.1.x/solaris10sparc/gcc4_9/release32/lib
-licudata_sb32 -licui18n_sb32 -licuuc_sb32 -lpthread -lm
-Wl,-M,exports_Solaris.map -lrt -lnsl -lsocket -lresolv -lxnet
-Wl,-M,exports_Solaris.map
-Wl,-zallextract,/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libSimbaODBC.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libSimbaDSI.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libSimbaSupport.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libAEProcessor.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libCore.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libDSIExt.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libExecutor.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/SimbaEngine/Maintenance/10.1/Product/Lib/solaris10sparc/gcc4_9/release32/libParser.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/KerberosSupport/Maintenance/10.1/Lib/solaris10sparc/gcc4_9/release32/libKerberosSupport.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/ThriftExtension/0.9.0/Maintenance/10.1/Lib/solaris10sparc/gcc4_9/release32/libThriftExtension.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/DriverSupport/Maintenance/10.1/Lib/solaris10sparc/gcc4_9/release32/libDriverSupport.a
-Wl,-zweakextract,/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/openssl/1.1.0/solaris10sparc/gcc4_9/release32/lib/libssl.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/openssl/1.1.0/solaris10sparc/gcc4_9/release32/lib/libcrypto.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/cyrus-sasl/2.1.26/saslGSSAPI/Maintenance/1.0/Binaries/solaris10sparc/gcc4_9/release32/lib/libsasl2.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_date_time.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_regex.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_thread.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_system.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/thrift/0.9.0_openssl1.1.0_boost1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libthrift.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/boost/1.57.0_sb_icusb_53.1.x/solaris10sparc/gcc4_9/release32/lib/libboost_sb_atomic.a,
/bamboo/bamboo-agent-home/xml-data/build-dir/Drivers/DriverShared/cyrus-sasl/2.1.26/saslGSSAPI/Maintenance/1.0/Binaries/solaris10sparc/gcc4_9/release32/lib/sasl2/libgs2.a
-L/bamboo/bamboo-agent-home/xml-data/build-dir/ThirdParty/MIT_Kerberos/1.14/solaris10sparc/gcc4_9/release32/lib
-lgssapi_krb5 -lkrb5 -lkrb5support -lk5crypto -lcom_err
-o ../Bin/solaris10sparc/gcc4_9/release32/libimpalaodbc_sb32.so

产生一个C ++共享对象,而不动态依赖libstdc++.so另外,请注意,尽管有-static-libgcc论点,但仍然动态依赖于libgcc_s.so

libgcc_s.so.1 =>         /opt/csw/lib/libgcc_s.so.1

这可能是因为一个或全部libicudata_sb32.solibicui18n_sb32.so和/或libicuuc_sb32.so在某种程度上有联系的需要动态libgcc编译libconfig ++用-static-libgcc中和-static-的libstdc ++对于其中一个问题的一个例子-static-libgcc,并-static-libstdc++仍然产生具有动态依赖性的二进制上这些库的共享对象的版本。

您用于加载此共享库的C二进制文件与之链接

gcc -std=gnu99 -m32 -DODBCVER=0x0350 -DIODBC_BUILD=8120326 -m32
-o iodbctest iodbctest.o  ../iodbc/.libs/libiodbc.a -ldl

那不会导致对的任何依赖libstdc++.so,也不应该。

并参见静态链接libstdc ++:有什么陷阱?关于libstdc++静态链接潜在问题的一个问题并且请注意,即使是该问题也仅涉及将一个副本静态链接libstdc++到可执行文件中。静态链接libstdc++到共享库中会引发各种其他问题:喜欢的每个C ++共享库都可以通过这种方式正确访问该C ++运行时的一个副本吗?还是要静态链接多个副本libstdc++到您的过程可能会加载的每个C ++共享对象中?如何用好工作?如果奇怪的问题开始出现,您甚至将如何调试它们?

如果非C ++可执行文件动态加载libstdc++内部具有静态副本的C ++共享对象,然后该同一个可执行文件动态链接到另一个具有动态依赖关系的C ++共享对象,会发生libstdc++.so什么情况呢?那么,当libstdc++.so静态副本已经被加载和初始化之后,加载C ++运行时的动态副本时,会发生什么呢?如果您撤销订单会怎样?如果升级会发生变化libstdc++.so,但您没有提供的静态链接副本的更新副本,该libstdc++怎么办?

底线是:如果要创建需要由非C ++可执行文件加载的C ++共享对象,并且不想处理上面列出的所有潜在问题,则需要正确记录对C ++的动态依赖关系所有C ++共享对象中的运行时。

您需要添加类似

-lgcc -lstdc++

C ++共享对象共享对象链接命令,这些命令可以加载到C二进制文件中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在抛出 std::exception 实例后调用终止

抛出异常实例后终止调用,核心转储

在抛出'kj :: ExceptionImpl'实例后,Cap'n Proto终止被调用

抛出'std :: regex_error'实例后调用终止

抛出'pqxx :: broken_connection'实例后调用终止

在抛出“std::system_error”实例后调用 Tensorflow 终止

抛出'std :: out_of_range'实例后调用终止

抛出“ char const *”实例后,调用C ++中的异常处理终止

为什么在插入析构函数时总是得到“在抛出...实例后终止调用”?

C++ 抛出错误“在抛出‘std::bad_alloc’的实例后终止调用”

在C ++中抛出'std :: out_of_range'实例后调用终止

得到错误“抛出'std :: bad_alloc'what():whatstd :: bad_alloc实例后终止调用”

抛出“std::system_error”线程池实例后调用终止

为什么在抛出'std :: bad_alloc'实例后终止调用?

C ++错误:抛出'std :: bad_alloc'实例后终止调用

Tensorflow MNIST:抛出'std :: bad_alloc'实例后调用终止

抛出“std::invalid_argument”实例后调用终止 what(): leetcode 问题中的 stoi 错误

在抛出'std::runtime_error' what() 实例后调用终止:filebuf 和 ostream 的 I/O 错误

抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

在抛出“std::regex_error”what() 实例后调用终止:括号未关闭

在字符串函数中抛出“ char const *”的实例后调用终止

std::stoi() 错误——“在抛出 'std::invalid_argument' 实例后终止调用”

在抛出 'std::out_of_range' what() 实例后调用终止:basic_string::at: __n 错误

抛出'std::bad_alloc'的实例后调用C++终止

c++ 在抛出'std::out_of_range' std::vector 的实例后调用终止

SWIG C ++到Python:抛出...异常终止后终止调用

比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

C ++应用程序MySQL odbc数据库连接错误:抛出'otl_tmpl_exception <>实例后终止调用

将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止